Bash - 如何循环遍历子目录并复制文件?

3

我是一个新手,在学习Bash编程。

我正在尝试创建一个可以循环遍历所有子目录的脚本,并在每个子目录中复制一个文件。

例如,如果我有以下目录:

/dir1/  
/dir2/  
/dir3/  
...  
...  
/dirX/

有一个文件fileToCopy.txt

然后我想运行一些东西,它将打开每个单独的/dirX文件并将fileToCopy.txt放在那个目录中。最终留下:

/dir1/fileToCopy.txt
/dir2/fileToCopy.txt
/dir3/fileToCopy.txt
...
...
/dirX/fileToCopy.txt

我希望能够通过循环来完成这个任务,因为我接下来会尝试修改这个循环以添加更多步骤,因为最终这个 .txt 文件实际上是一个 .java 文件,我想将它复制到每个目录中,与其中的其他类一起编译,并运行它以收集输出结果。
谢谢。
2个回答

8
for i in dir1, dir2, dir3, .., dirN
    do
        cp /home/user1068470/fileToCopy.txt $i
    done

或者,您可以使用以下代码。

for i in *
    do                 # Line breaks are important
        if [ -d $i ]   # Spaces are important
            then
                cp fileToCopy.txt $i
        fi
    done

嗨,对于这个方法,我需要知道所有子目录的名称吗?我希望只需说: 循环遍历当前位置的所有子目录 复制文件 完成或者这就是它实际上正在做的吗?谢谢! - ThePerson
请见我的第二个回答。 - asenovm
1
一些小事情:空格和引号,即 [ -d "$i" ]cp fileToCopy.txt "$i" - doubleDown

7
查找当前目录下的所有目录(.)并将文件复制到它们中:
find . -type d -exec cp fileToCopy.txt '{}' \;

嗨,谢谢你的帮助。这个确实可以工作,但我希望有一个循环,这样我就可以添加一些额外的步骤。 - ThePerson
find . -type d -name "dir?" -exec cp fileToCopy.txt '{}' \; - Vijay
@sarathi,不认为你需要在这里使用-name“dir?”,因为OP正在遍历所有子目录。 - doubleDown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接