有的时候可能出现类似这样的应用场景:
先用一段命令输出一个文件名的列表,然后需要将这个列表里的文件拷贝到某个目录下。
错误的代码这么写:
cat filelist | cp destdir
按照上面的写法,管道后面的命令实际上是:
cp destdir $file # file 表示filelist中的一个文件名
显然,上面的命令倒置了源文件和目标路径。
正确的写法是这样:
cat filelist | cp -t destdir
#or
cat filelist | xargs -I {} cp {} destdir
查看man手册可以知道cp -t选项和xargs -I选项的用法。
cp [OPTION]... -t DIRECTORY SOURCE...
xargs -I replace-str cp replace-str destdir
xargs的-I选项指定一个占位符,供cp使用