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

sha*_*and 2 linux bash shell zsh

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

/var/log/messages-20111001
/var/log/messages-20111001.hash
Run Code Online (Sandbox Code Playgroud)

我已经有几个旋转了,现在我留下了大量/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
Run Code Online (Sandbox Code Playgroud)

应该减少到:

/var/log/messages-20111005
/var/log/messages-20111005.hash
/var/log/messages-20111006
/var/log/messages-20111006.hash
Run Code Online (Sandbox Code Playgroud)

Wil*_*ell 7

for file in *.hash; do test -f "${file%.hash}" || rm -- "$file"; done
Run Code Online (Sandbox Code Playgroud)

  • 我的文件没有空格,但如果有,我认为`for file in*.hash; 测试-f"$ {file%.hash}"|| rm"$ file"; 完成`会工作 (2认同)