删除目录中最旧的文件时出错。(gio 与 xargs 一起使用时出现删除错误)

删除目录中最旧的文件时出错。(gio 与 xargs 一起使用时出现删除错误)

18.04能够寻找删除所有,只留下最新的n (例如 8)文件在目录中:

find . -maxdepth 1 -type f | sort -r | sed 1,8d | xargs -d \n gio trash

当我尝试这个在新安装的20.04我明白了错误

gio: file:///path/to/file.txt%0A: Error moving file /path/to/file.txt
 to the Rubbish Bin: No such file or directory

可以手动删除同一个文件无错误使用:

gio trash file.txt

升级后我缺少了什么?

答案1

由于您没有引用转义符,因此运行\n前 bash 会解释转义符。因此,您指示使用而不是来剪切项目。xargsxargsn\n

您想将其放在单引号中:-d '\n'

可视化该问题:

# cut by n where you want newline:
$ printf 'a\nb' | xargs -d \n -I{} echo -{}-
-a
b-

# quote \n and it works:
$ printf 'a\nb' | xargs -d '\n' -I{} echo -{}-
-a-
-b-

# cut by "n" if you had n in your filename:
$ printf 'anb' | xargs -d \n -I{} echo -{}-
-a-
-b-

(我用来-I{} echo -{}-显示分隔的项目,以揭示分隔符是否/如何工作)


虽然这种方法可行,但我还是建议不要这么做

您永远不应该使用换行符来分隔文件名,因为换行符是有效字符。

更好的使用:

find . -maxdepth 1 -type f -print0 | sort -rz | sed -z 1,8d | xargs -0 gio trash

相关内容