递归复制文件

时间:2014-03-25 23:15:27

标签: bash shell

我有一个像

这样的目录结构
# parent directory
dir/

在此目录下有三个子目录:

dir1/dirA/dirB/
dir2/dirC/dirD/
dir3/dirE/dirF/

我希望将文件递归复制到第一个子目录中,只有dir1 / dir2 / dir3 /,而不是它的子目录dirA / dirC / dirE /等等我正在使用

find . -type d -exec cp filename.txt {} \;

但它也将文件复制到'dir2'和'dir'。我使用--min-depth参数但没有成功。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

ls -b --file-type | egrep "/$" | xargs -n 1 cp filename.txt

要解释,egrep正在从输出中过滤目录,然后将其作为参数传递给cp命令。当然要记住,filename.txt在CWD中,或者修改路径。

编辑:此解决方案处理目录名称中的空格。

答案 1 :(得分:0)

如果您在/dir/中有一个文件,并且希望将其递归复制到/dir/dir1中的目录树,则需要将find命令中的源目录更改为/ dir / dir1 ,像这样:

find dir -type d -mindepth 1 -maxdepth 1 -exec cp /dir/filename.txt {} \;

如果您复制文件的模式变得更加困难,您可以使用-printf打印出可能的变体,而不是直接从查找中复制。例如:

find dir -type d -mindepth 1 -maxdepth 1 -printf "cp %p\n"

希望这有帮助。

或者,使用bash语法,您可以跳过查找并说:

cd $dir; for d in dir1 dir2 dir3 ; do
  cp filename.txt $d
done

或者只使用三份复制声明。