我想将命令搜索到的文件复制find
到当前目录
# find linux books
find ~ -type f -iregex '.*linux.*\.pdf' -print0 | xargs -0 echo
# the result
../Books/LinuxCollection/Linux_TLCL-17.10.pdf ../Richard Blum, Christine Bresnahan - Linux Command Line and Shell Scripting Bible, 3rd Edition - 2015.pdf ..
测试使用命令“cp”将文件复制到当前目录
find ~ -type f -iregex '.*linux.*\.pdf' -print0 | xargs -0 cp .
得到错误:
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory
我通过命令替换解决了问题
cp $(find ~ -type f -iregex '.*linux.*\.pdf' -print0) .
如何实现它xargs
?
答案1
正如cp
错误所示,目标目录必须位于最后。由于看起来您cp
没有相当于 GNUcp
的-t
选项,因此您必须使用 xargs 在cp
和之间插入文件名.
:
find ... | xargs -0 -I _ cp _ .
where-I
用于告知哪个字符串将被输入替换(在本例中我使用的是_
,但{}
也很常用)。
当然,这可以自己完成find
:
find ~ -type f -iregex '.*linux.*\.pdf' -exec cp {} . \;