2011-08-23 52 views
4

我有大约1000个文件夹,我想提取单个文件从上传到服务器,但我需要保留目录树。保存目录树,同时复制文件与cp

cp */myFile.txt ../newTree 

是什么,我基本上是想这样做,但不是每个文件被保存到../newTree/myFile.txt我想这是../newTree/*/myFile.txt其中*cp命令通配符。

我不能在这个男人文件中找到一个标志,所以我想我可能需要除了cp

回答

7

其他实用程序使用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 
+0

谢谢,我不太了解rsync,但我会研究它。该脚本更符合我的舒适程度 –

+1

只需跟进一下,它应该是'dir = $(dirname“$ file”)' –

4

存储所有在tar存档文件,然后提取到服务器上。

+0

或者执行相同的操作,将输出从tar发送到标准输出,然后管道到另一个tar程序将解压stdin:'find ./ -name myFile.txt -print0 | tar cvf - | tar xvf - -C ../ newTree /' –

相关问题