所有目标文件已被删除。当然,当我尝试再次运行任何删除时,文件无法删除。抱歉耽误您的时间。
我在 cygwin 上使用 bash。
我的输出fdupes
在一个文件中。我正在 grep 输出以排除我想保持完整的目录,并希望删除列出的其余文件。
我有一些带有空格的条目:
./NewVolume/keep/2009/conference/conference/conference 004.jpg
哪个跳闸xargs
:
$ cat real-dupes.txt |xargs rm {}
...
rm: cannot remove ‘2009/conference/conference/conference’: No such file or directory`
当我尝试-0
切换时,看起来这些行被组合在一起:
$ cat real-dupes.txt |xargs -0 rm
xargs: argument line too long
其他问题都有答案,建议提问者使用find
答案将论点输入xargs
。这对我的场景没有帮助,因为我不相信我可以轻松地使用它find
来识别我想要删除的重复项。另外,fdupes 作业运行了大约 12 个多小时,所以我真的很想使用这个数据集。
据我所知,fdupes
无法将目录从自动删除中排除,因此我也无法开箱即用。
答案1
xargs -0
不起作用,因为它需要一个以 null 结尾的字符串,但它找不到该字符串,因此读取所有输入并对其参数进行通配。
只需用 转换每个新行(我想每行都有一个文件名)\0
,如下所示:
cat real-dupes.txt | tr '\n' '\0' | xargs -0 rm {}
答案2
默认情况下xargs
在空白处分割。您也许可以使用非标准 -0
选项在字符处分割\000
,但您的输入必须准备好符合预期。 (find ... -print0
这是执行此操作的方法之一 - 假设您的版本find
有该-print0
选项。)
如果您的文件名称中不包含新行(即每行一个文件),您可以xargs
像这样使用:
xargs -I{} rm {} <real-dupes.txt
的手册页xargs
对标志有这样的描述-I
:
-I replace-str
replace-str
将初始参数中 出现的 替换为从标准输入读取的名称。此外,不带引号的空格不会终止输入项;相反,分隔符是换行符。意味着-x
和-L 1
。