Pau*_*aul 19 linux shell terminal find xargs
是否可以将结果find传递给COPY命令cp?
像这样:
find . -iname "*.SomeExt" | cp Destination Directory
Run Code Online (Sandbox Code Playgroud)
寻求,我总是找到这样的公式,如从这篇文章:
find . -name "*.pdf" -type f -exec cp {} ./pdfsfolder \;
Run Code Online (Sandbox Code Playgroud)
这提出了一些问题:
|烟斗?这不是它的用途吗?-exec|?fed*_*qui 19
好问题!
- 为什么你不能使用| 管?这不是它的用途吗?
当然,你可以xargs为这些情况做管道:
find . -iname "*.SomeExt" | xargs cp Destination_Directory/
Run Code Online (Sandbox Code Playgroud)
- 为什么每个人都推荐-exec
这-exec很好,因为它可以更准确地控制您正在执行的内容.无论何时管道,角落情况都可能出现问题:文件名包含空格或新行等.
- 我怎么知道何时使用(exec)管道 ?
这完全取决于你,可能有很多案例.-exec每当要执行的操作很简单时,我会使用它.我不是一个非常好的朋友xargs,我倾向于选择将find输出提供给while循环的方法,例如:
while IFS= read -r result
do
# do things with "$result"
done < <(find ...)
Run Code Online (Sandbox Code Playgroud)
gle*_*man 18
有一个很少使用的选项cp:-t destination- 参见手册页:
find . -iname "*.SomeExt" | xargs cp -t Directory
Run Code Online (Sandbox Code Playgroud)
你可以使用|如下:
find . -iname "*.SomeExt" | while read line
do
cp $line DestDir/
done
Run Code Online (Sandbox Code Playgroud)
回答你的问题:
|可以用来解决这个问题.但如上所述,它涉及大量代码.而且,|将创建两个过程 - 一个用于find另一个用于cp.
而使用exec()内部find将在单个过程中解决问题.
小智 6
尝试这个:
find . -iname "*.SomeExt" -print0 | xargs -0 cp -t Directory
# ........................^^^^^^^..........^^
Run Code Online (Sandbox Code Playgroud)
如果文件名中有空格。
| 归档时间: |
|
| 查看次数: |
18775 次 |
| 最近记录: |