是否可以将FIND的结果传递给COPY命令CP?
问题描述:
是否可以将find
的结果传递给COPY命令cp
?是否可以将FIND的结果传递给COPY命令CP?
像这样:
find . -iname "*.SomeExt" | cp Destination Directory
求是,我总是觉得这种公式such as from this post的:
find . -name "*.pdf" -type f -exec cp {} ./pdfsfolder \;
这就产生了一些问题:
- 你为什么不能只是使用
|
管?这不是它的目的吗? - 为什么大家都推荐
-exec
- 我怎么知道何时使用那个(exec)管道
|
?
答
好问题!
- 为什么不能使用|管?这不是它的目的吗?
可以通过管道,当然,xargs
针对这些情况下完成的:
find . -iname "*.SomeExt" | xargs cp Destination_Directory/
开始=>
- 为什么大家推荐-exec
-exec
是好的,因为它提供了更多的控制你准确的执行。每当你管有可能是极端情况的问题:含有空格的文件名或新的生产线,等等。
开始=“3”>
- 我怎么知道什么时候使用(执行)在管| ?
这是真的取决于你,可以有很多情况。只要执行的动作很简单,我就会使用-exec
。我不是xargs
是很好的朋友,我倾向于选择其中find
输出提供给while
循环的方法,如:
答
您可以使用|
象下面这样:
find . -iname "*.SomeExt" | while read line
do
cp $line DestDir/
done
回答您的问题:
|
可以用来解决这个问题。但是如上所见,它涉及很多代码。此外,|
将创建两个过程 - 一个为find
,另一个为cp
。而是使用
exec()
而不是find
将在单个过程中解决问题。
答
有用于cp
一个很少使用的选项:-t destination
- 请参见手册页:
find . -iname "*.SomeExt" | xargs cp -t Directory
答
试试这个:
find . -iname "*.SomeExt" **-print0** | xargs **-0** cp -t Directory
但如果是白色的空间的文件名。
'cp'不接受stdin afaik。 – user2864740 2014-10-07 10:43:25
[Bash:find and copy]的可能重复(http://stackoverflow.com/questions/1562102/bash-find-and-copy)。 – BroSlow 2014-10-07 11:16:31
假设你的'find'具有'-exec ... +',并且你通过pipe/xargs保护你的文件名,那么你使用哪一个真的不重要。如果你的'find'没有'-exec ... +',那么对于任何可以带多个文件名参数的命令,都应该小心使用pipe/xargs。 – BroSlow 2014-10-07 11:25:26