我一直在尝试编写自己的小备份脚本。当我运行脚本时遇到问题,并且该rm
命令无关。我仍然想处理输出(又名根据操作是否失败显示不同的消息),但抑制rm
.目前这个:
ls -t | tail -n +$startnumber | xargs -d '\n' rm && echo "Removed old backup(s)." || echo "No more than $keepnumber files; nothing to do."
不幸的是输出这个:
rm: missing operand Try 'rm --help' for more information. No more than 14 files; nothing to do.
我想去掉前两行,只输出我自己的“更清晰”的消息。我尝试过使用,rm -f
但这总是(并且错误地)触发成功的输出。
答案1
这些rm
消息被发送到标准错误 ( stderr
)。您可以将标准错误输出 ( stderr
) 重定向为/dev/null
:
xargs -d '\n' rm 2>/dev/null
这将防止这两行都打印在您的终端上,并且只会显示您的自定义消息。
答案2
我只是将文件列表保存在临时文件中,并在尝试之前计算其中的行数rm
。 (或者先计算文件数。)
您还可以将错误从rm
to重定向/dev/null
,但这会掩盖有效的也有错误。
说
tmpfile=$(mktemp)
ls -t | tail -n +$startnumber > $tmpfile
if [ -s "$tmpfile" ] ; then
echo not empty, do something with filelist in $tmpfile
else
echo empty, do something else
fi
rm "$tmpfile"
当然,ls
如果您的文件名由于某种原因包含换行符,这样使用会中断。 (是的,这是可能的。尽管在这种情况下,这仅意味着某些文件没有被删除,尽管它们应该被删除。)