xargs 无法处理行中的空格

use*_*394 6 bash xargs

所有目标文件已被删除。当然,当我尝试再次运行任何删除时,文件无法删除。抱歉耽误您的时间。

\n\n
\n\n

我在 cygwin 上使用 bash。

\n\n

我的输出fdupes在一个文件中。我正在 grep 输出以排除我想保持完整的目录,并希望删除列出的其余文件。

\n\n

我有一些带有空格的条目:

\n\n

./NewVolume/keep/2009/conference/conference/conference 004.jpg

\n\n

哪个跳闸xargs

\n\n
$ cat real-dupes.txt |xargs rm {}\n...\nrm: cannot remove \xe2\x80\x982009/conference/conference/conference\xe2\x80\x99: No such file or directory`\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我尝试-0切换时,看起来这些行被组合在一起:

\n\n
$ cat real-dupes.txt |xargs -0 rm\nxargs: argument line too long\n
Run Code Online (Sandbox Code Playgroud)\n\n

其他问题都有答案,建议提问者使用find答案将论点输入xargs。这对我的场景没有帮助,因为我不相信我可以轻松地使用它find来识别我想要删除的重复项。另外,fdupes 作业运行了大约 12 个多小时,所以我真的很想使用这个数据集。

\n\n

据我所知,fdupes无法将目录从自动删除中排除,因此我也无法开箱即用。

\n

Kir*_*ira 5

xargs -0不起作用,因为它需要一个以 null 结尾的字符串,但它找不到该字符串,因此读取所有输入并对其参数进行通配。

只需用 转换每个新行(我想每行都有一个文件名)\0,如下所示:

cat real-dupes.txt | tr '\n' '\0' | xargs -0 rm {}
Run Code Online (Sandbox Code Playgroud)


roa*_*ima 4

默认情况下xargs在空白处分割。您可以使用非标准 -0 选项在字符处进行分割\000,但您的输入必须准备好符合预期。(这find ... -print0是执行此操作的方法之一 - 假设您的版本find有该-print0选项。)

如果您的文件名称中不包含新行(即每行一个文件),您可以xargs像这样使用:

xargs -I{} rm {} <real-dupes.txt
Run Code Online (Sandbox Code Playgroud)

的手册页对标志xargs有这样的描述-I

-I replace-strreplace-str将初始参数中 出现的 替换为从标准输入读取的名称。此外,不带引号的空格不会终止输入项;相反,分隔符是换行符。意味着-x-L 1