我有一个文件,file_copy
其中包含:
>cat file_copy
file1
file2
file3
我想将file1
, file2
,file3
从复制/source
到/dest
。我知道的一种方法是这样做:
for line in `cat file_copy` ; do cp /source/$line /dest; done
但我知道有更好的方法,可能使用 find/xargs 和/或 awk 等。执行此操作的首选方法是什么?
答案1
遍历文件中各行的最佳方法是使用while
:
while read line; do cp /source/"$line" /dest/; done < file_copy
虽然上述方法对于大多数情况来说已经足够了,但更强大的解决方案(虽然很少需要)是:
while IFS= read -r line; do cp /source/"$line" /dest/; done < file_copy
防止IFS=
在行首和行末修剪空格。-r
防止丢弃反斜杠。
关于您的原始命令:
答案2
为了提高性能,您可以考虑这样做:
tar -cf - 'cat source.txt' | (cd $dest ; tar -xf -)
压缩源内的文件并提取它们会比循环更快地完成工作!