我有一个像
这样的目录结构# 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
参数但没有成功。有什么想法吗?
答案 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
或者只使用三份复制声明。