将文件复制到所有子文件夹和所有子子文件夹

将文件复制到所有子文件夹和所有子子文件夹

将文件复制到所有子文件夹和子子文件夹中。

我有一个文件,a.txt

我想将其复制到所有子文件夹以及这些文件夹内的所有文件夹。我尝试创建一个脚本来运行它,但一直出现错误。

有什么帮助吗?

我尝试的代码如下。但这只会将其复制到子目录中,而不是子子目录中

for i in ./* # iterate over all files in current dir
do
    if [ -d "$i" ] # if it's a directory
    then
        cp a.txt "$i" # copy a.txt into it
    fi
done
        cd ..
    done

答案1

您的脚本仅复制到子目录中,因为这就是您告诉它要做的全部事情(./*是当前目录中的所有文件,并且您永远不会再深入)。您可以递归地实现它,但做类似的事情可能更容易:

find . -mindepth 1 -type d -exec cp a.txt {} \;

或者,符合 POSIX 规范并实现最大程度的可移植性

find . ! -path . -type d -exec cp a.txt {} \;

这将完成你想要的:复制文本文件到当前树中的每个(子)目录。

-maxdepth如果需要,您可以使用该选项来限制子目录的深度。您可以使用该-mindepth选项(如果可用)来设置最小深度限制。在上面的第一个例子中,我们使用-mindepth 1skip.来避免输出有关将文件复制到其自身的警告——这不是绝对必要的,但没有警告会更好。

有关更多信息,find请查看其手册页

相关内容