2

Я хочу иметь возможность искать самый последний файл, заканчивающийся на .backup, и удалять ВСЕ файлы, которые старше этого файла (но, конечно, сохраняют более новые файлы).

Вот пример списка каталогов, где вы можете увидеть несколько сделанных резервных копий. Я хотел бы сохранить файлы 000000020000000000000083.00000020.backup и 000000010000000000000082, но как-то удалить все старое.

Я могу придумать много хакерских способов сделать это, например, выполнить поиск с -mtime и удалить файл старше, чем день, что может работать для меня, но не правильно. Я также мог бы составить список каталогов ДО того, как я сделаю резервную копию, затем сравнить ее с последующими и удалить все файлы, которые были до этого. Это все еще не правильно.

Есть идеи?

$ ls -ltr
total 131084
-rw-r-----. 1 cm800 cm800        0 May  6 13:58 archive_06_05_14___13_58_05
-rw-------. 1 cm800 cm800 16777216 May  6 13:58 00000001000000000000007F
-rw-------. 1 cm800 cm800 16777216 May  6 13:58 000000020000000000000080
-rw-------. 1 cm800 cm800 16777216 May  6 13:58 000000020000000000000081
-rw-------. 1 cm800 cm800      242 May  6 13:58 00000001000000000000007F.00000020.backup
-rw-------. 1 cm800 cm800      242 May  6 13:58 000000020000000000000081.00000020.backup
-rw-------. 1 cm800 cm800 16777216 May  6 14:03 000000010000000000000080
-rw-------. 1 cm800 cm800 16777216 May  6 14:06 000000020000000000000082
-rw-------. 1 cm800 cm800 16777216 May  6 14:06 000000010000000000000081
-rw-------. 1 cm800 cm800 16777216 May  6 14:07 000000020000000000000083
-rw-------. 1 cm800 cm800      242 May  6 14:07 000000020000000000000083.00000020.backup
-rw-------. 1 cm800 cm800 16777216 May  6 14:11 000000010000000000000082

1 ответ1

3

Используйте операторы -nt , -ot чтобы проверить, является ли файл более новым или более старым, чем другой:

#! /bin/bash

# Find the newest backup file:
unset newest
for f in *.backup ; do
    [[ $newest ]] || newest=$f           # Initialize.
    [[ $f -nt $newest ]] && newest=$f    # Keep the newest so far.
done

# Delete all the older files:
for f in * ; do
    [[ $f -ot $newest ]] && rm "$f"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .