我正在尝试使用 Debian 中的脚本删除树中最旧的文件。
find /home/backups -type f \( -name \*.tgz -o -name \*.gz \) -print0 | xargs -0 ls -t | tail -1 | xargs -0 rm
但是我得到一个错误:
rm: cannot remove `/home/backups/tree/structure/file.2011-12-08_03-01-01.sql.gz\n': No such file or directory
任何想法我做错了什么(或者有更简单/更好的方法吗?),我尝试过 RTFM,但迷路了。
最佳答案
ls
附加一个换行符,最后一个 xargs -0 表示换行符是文件名的一部分。
使用 -d '\n'
而不是 -0
运行最后一个 xargs。
顺便说一句,由于 xargs 的工作方式,您的整个管道都是一个等待发生的错误。考虑由 find
生成的非常长的文件名列表,以便 xargs -0 ls
使用文件名的子集多次运行 ls
。只有最老的last ls
调用 才能通过tail -1
。如果最旧的文件实际上是 find
输出的第一个文件名,那么您正在删除一个较新的文件。
关于linux - xargs 并查找,rm 提示文件名中的\n(换行符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8519219/