打开文件并将列出的文件复制到另一个文件夹

打开文件并将列出的文件复制到另一个文件夹

我有一个名为包含文件名的文件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

相关内容