我很清楚如何使用 bash 将文件列表简单地复制到另一个位置,但问题是我的文件列表包含的文件名几乎包含所有需要在 bash 中转义的字符。有大量空格、!、"、"、? 以及您能想到的几乎所有其他需要转义的字符。
我最初厌倦了浏览文本文件并转义所有这些字符,但这……很累,即使使用搜索和替换(但这确实有效)(我用一个更小的文件列表进行了测试。)我也尝试在文本文件的路径之前和之后添加单引号,但那不起作用。我也尝试在 cp 后的 % 之前和之后添加单引号,但显然我不知道我在做什么。:)(我确实知道如果我以某种方式用单引号括住文件路径,我必须在文本文件中转义单引号。)
我正在使用此命令将文件列表复制到另一个位置,但同样,它不适用于特殊字符。
cat file.txt | xargs -J % cp % ./folderToMoveto/
我知道还有其他命令可以执行相同的操作而不必将任何东西输入 xargs,并且这里的一些答案说 xargs 可以自己完成,但我还没有让那些命令工作,而上面的命令可以工作。
另外,我使用的是 OS X。
答案1
GNU xargs 有一个-0
选项允许它读取空字节分隔的数据。在 Linux 上,您可以执行以下操作:
tr '\n' '\0' < file.txt | xargs -0 cp -t /folder/to/move/to
遗憾的是,Apple 已将其旧版 Darwin 手册页网站下线,因此我无法检查是否有 MacOS 等效版本。