在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 会解释转义符。因此,您指示使用而不是来剪切项目。xargs
xargs
n
\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