2012-10-22 125 views
2

我是新来的编码bash。Bash - 如何遍历子目录并复制到文件中

我试图创建一个将循环所有子目录的东西,并在每个应该将文件复制到该目录。

因此,举例来说,如果我有以下目录

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

和文件fileToCopy.txt

然后我想运行的东西,这将打开每一个/dirX文件,并在该目录中放fileToCopy.txt。离开我:

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

我想这样做在一个循环中,因为那么我会尝试修改这个循环,多增加一些步骤,最终.txt文件实际上是一个.java文件,我想将它复制到每个目录中,编译它(与其中的其他类一起),然后运行它来收集输出。

谢谢。

回答

6
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 
+0

你好,对于这种方法,我需要知道的所有子目录的名称是什么?我希望可以这么说: 遍历我现在所在的所有子目录 复制文件 完成 或者这是实际上正在做什么?谢谢! – ThePerson

+0

请参阅我答案的第二部分。 – asenovm

+1

一些小的东西:空格和引号,即'[-d“$ i”]'和'cp fileToCopy.txt“$ i”' – doubleDown

6

查找当前目录下的所有目录和文件将复制到他们(。):

find . -type d -exec cp fileToCopy.txt '{}' \; 
+0

嗨,谢谢你的帮忙。这确实有效,但我希望能够在循环中添加一些额外的步骤。 – ThePerson

+0

'发现。 -type d -name“dir?” -exec cp fileToCopy.txt'{}'\;' – Vijay

+0

@sarathi,不要以为你需要'-name“dir?”',因为OP在所有子目录中循环 – doubleDown

相关问题