处理文本文件中列出的带有空格的文件名

处理文本文件中列出的带有空格的文件名

我有一个名为“list.txt”的文本文件中列出的文件列表,如下所示:

one file.jpg 
two file.jpg 
three file.jpg

现在我想将所有这些文件复制到另一个目录,然后尝试这样做:

cp $( cat 列表.txt ) 其他目录

但是,正如您所见,文件中有空格,然后 bash 将名称分成两部分,并且没有复制文件。

我尝试用引号和双引号括住名称,也尝试用反斜杠和空格 (\ ) 以及它们的组合来转义,但都无济于事。

"one file.jpg"
'one file.jpg'
one\ file.jpg

那么我该怎么办?

答案1

这将逐个复制文件(即每个cp命令一个文件),将每个源文件名括在双引号中:

awk '{ print "cp \"" $0 "\" other_directory }' list.txt | bash

答案2

cp对于(和mv等)的具体情况ln,这应该有效:

cat list.txt | xargs -d $'\n' cp -t b

这是因为它允许您以参数位于最后的方式-t运行。cp

相关内容