使用命令“xargs”复制多个文件

使用命令“xargs”复制多个文件

我想将命令搜索到的文件复制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 {} . \;

相关内容