以递归方式复制具有特定模式的文件

时间:2013-09-13 18:13:44

标签: unix recursion copy

我想递归复制所有以.pl

结尾的文件

如果我ls -R | grep -F .pl

我可以看到所有这些,但是如果我输入以下任何命令,我只会在当前目录中获取* .pl文件

cp -R *.pl

find . | ls *.pl

ls -r | ls *.pl

ls -R | grep -F .pl(这个我只得到一些)

如果我想使用scp -r user@address:/directory/*.pl .进行scp复制,我只会获取当前目录中的文件

find . -name \*.pl我没有得到所有这些文件,只有少数文件

如何在所有子目录中复制所有文件* .pl?

2 个答案:

答案 0 :(得分:1)

find path/to/dir -name "*.pl" -exec "cp" "{}" your/dest/dir ";"

编辑(2015/01/23):有人建议(通过编辑此帖子)在他的shell上它不能使用引号,他必须删除它们。我不知道那是哪个shell(:P),但它说它的工作方式如下:

find path/to/dir -name *.pl -exec cp {} your/dest/dir \;

基本上,引号是为了避免将星号扩展到文件列表(如果你在当前工作目录中有该扩展名的文件,这将在bash中自动发生),以避免误解一些花括号情况,并避免解释分号(;),该分号表示bash语句的结束(而我们希望它作为查找的参数)。

答案 1 :(得分:0)

只需要一次SSH身份验证,此命令就可以正常工作。

scp $(find . -name *.pl) $server_address:/destination/path/