Shell脚本删除不在一对中的文件的最佳方法

时间:2011-11-01 14:46:05

标签: linux bash shell zsh

我有一组成对出现的文件:

/var/log/messages-20111001
/var/log/messages-20111001.hash

我已经有几个旋转了,现在我留下了大量的/var/log/messages-201110xx.hash文件,没有相关的日志。我想清理这些混乱,但我不确定如何删除不属于“对”的文件。我可以使用bash或zsh(或任何LSB工具,真的)。我需要删除所有没有关联日志的.hash文件。

实施例

/var/log/messages-20111001.hash
/var/log/messages-20111002.hash
/var/log/messages-20111003.hash
/var/log/messages-20111004.hash
/var/log/messages-20111005
/var/log/messages-20111005.hash
/var/log/messages-20111006
/var/log/messages-20111006.hash

应该简化为:

/var/log/messages-20111005
/var/log/messages-20111005.hash
/var/log/messages-20111006
/var/log/messages-20111006.hash

2 个答案:

答案 0 :(得分:7)

for file in *.hash; do test -f "${file%.hash}" || rm -- "$file"; done

答案 1 :(得分:3)

这样的东西?

for f in /var/log/messages-????????.hash ; do
    [[ -e "${f%.hash}" ]] || rm "$f"
done