我试图用Debian中的脚本删除树中最旧的文件.
find /home/backups -type f \( -name \*.tgz -o -name \*.gz \) -print0 | xargs -0 ls -t | tail -1 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
rm: cannot remove `/home/backups/tree/structure/file.2011-12-08_03-01-01.sql.gz\n': No such file or directory
Run Code Online (Sandbox Code Playgroud)
任何想法我做错了(或者有更容易/更好的方式?),我尝试过RTFM,但我迷路了.
Jen*_*ens 11
该ls追加一个换行符,最后xargs的-0表示,新行是文件名的一部分.用-d '\n'而不是运行最后一个xargs -0.
顺便说一下,由于xargs的工作方式,你的整个管道都是等待发生的错误.考虑一个非常长的文件名列表find,以便使用文件名的子集多次xargs -0 ls运行ls.只有最后一次ls调用中最旧的调用才会超过tail -1.如果最旧的文件实际上是,例如,输出的第一个文件名find,则删除较年轻的文件.