gpt4 book ai didi

linux - xargs 并查找,rm 提示文件名中的\n(换行符)

转载 作者:IT王子 更新时间:2023-10-29 01:03:13 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com