【问题标题】:Preserve directory tree while copying files with cp使用 cp 复制文件时保留目录树
【发布时间】:2011-08-23 16:02:17
【问题描述】:

我有大约 1000 个文件夹,我想从中提取单个文件以上传到服务器,但我需要保留目录树。

cp */myFile.txt ../newTree

这是我基本上想要做的,但不是每个文件都保存到 ../newTree/myFile.txt 我希望它是 ../newTree/*/myFile.txt 其中 * 是来自 cp 命令的通配符。

我在 man 文件中找不到这个标志,所以我想我可能需要除 cp 之外的另一个实用程序

【问题讨论】:

    标签: bash shell terminal cp


    【解决方案1】:

    使用 rsync:

    find ./ -name myFile.txt -print0|rsync -0adv --files-from=- ./ ../newTree/
    

    没有 rsync:

    您可以找到所有文件,为每个文件在 newTree 中创建目录,并将文件复制到其中。

    for file in */myFile.txt; do
        dir=$(dirname "$file")
        mkdir -p "../newTree/$dir"
        cp "$file" "../newTree/$dir"
    done
    

    【讨论】:

    • 谢谢,我不太了解 rsync,但我会研究一下。剧本更符合我的舒适度
    • 只是一个后续,应该是dir=$(dirname "$file")
    【解决方案2】:

    将所有文件存储在 tar 存档中,然后将其解压缩到服务器上。

    【讨论】:

    • 或者做同样的事情,将输出从 tar 发送到 stdout,然后通过管道传送到另一个解压 stdin 的 tar 进程:find ./ -name myFile.txt -print0 | tar cvf - | tar xvf - -C ../newTree/
    猜你喜欢
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2015-03-04
    相关资源
    最近更新 更多