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

Unix 以递归方式复制具有特定模式的文件,unix,recursion,copy,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进行scp复制user@address:/directory/*.pl.我只获取当前目录中的文件 使用查找-name\*.pl我没有得到所有文件,只有几个文件 如何复制所有子目录中

我想递归复制以.pl结尾的所有文件

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

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

cp-R*.pl

find.|ls*.pl

ls-r | ls*.pl

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

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

使用
查找-name\*.pl
我没有得到所有文件,只有几个文件

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

find path/to/dir -name "*.pl" -exec "cp" "{}" your/dest/dir ";"
编辑(2015/01/23):有人建议(通过对这篇文章的编辑)在他的外壳上不能使用引号,他必须删除它们。我不知道那是哪个外壳(:P),但它说它的工作方式如下:

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

从本质上讲,引号是为了避免将星号扩展到文件列表(如果当前工作目录中有扩展名为该文件,则在bash中会自动发生这种情况),避免在某些情况下对大括号的误解,并避免对分号的解释(
)这标志着bash语句的结束(而我们希望它作为find的参数)。

这个命令只需要一个SSH身份验证就可以正常工作

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

似乎有点奇怪,你没有得到所有的文件与查找-我无法找出这一个不知道你的设置或哪些文件被排除。无论如何,如果您可以使用ls+grep列出所有文件,我建议使用正确的copy命令将这些文件传输到xargs。有关使用xargs的示例,请参见。感谢您的快速回复。抱歉,我意识到我没有等待足够的时间来完成命令,我是linux新手。所以find命令实际上显示了所有的文件,这个命令运行得很好<代码>查找-name\*.pl | cpio-pdv../directory/我唯一不知道怎么做的是,所有文件都在一个没有子目录的目录中结束。这个命令保留子目录结构吗?我对此表示怀疑。