我有一个名为包含文件名的文件file1.txt
,如下所示:
filea.txt
fileb.txt
filec.txt
我想将列出的文件复制file1.txt
到另一个文件夹。使用的 UNIX 命令是什么? (外壳是ksh88
相关的)。
答案1
您的格式假设文件名中没有换行符,这并不理想(换行符在文件名中是合法的)。你也没有提到你的外壳。但是,在 POSIX shell 中,您可以执行以下操作:
while IFS= read -r file; do
cp -- "$file" new_dir/
done < file
然而,在 bash 中,一次性将它们全部传递给 cp 可能会更快(只要你在下面ARG_MAX
):
files=()
while IFS= read -r file; do
files+=( "$file" )
done < file
cp -- "${files[@]}" new_dir/
...或者,同样的事情,如果你有 bash4+:
mapfile -t files < file
cp -- "${files[@]}" new_dir/
答案2
使用 GNU 工具:
xargs -rd '\n' cp -t /dest/folder -- < file1.txt
POSIXly:
sed 's/./\\&/g' < file1.txt | xargs sh -c 'exec cp -- "$@" /dest/dir' sh