Сценарий оболочки лучший способ удалить файлы не в паре - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть набор файлов, которые идут парами:

/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 ]

7 голосов
/ 01 ноября 2011
for file in *.hash; do test -f "${file%.hash}" || rm -- "$file"; done
3 голосов
/ 01 ноября 2011

Как то так?

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