If i help You, send me BTC please 1CJGz4UGyL7hTjPeN8j7fu9LRmmWiWSRHi

Удалить все, кроме нескольких самых свежих файлов.

Постов 49 из 175

На днях понадобилось выполнить задачу с помощью скрипта на shell. Необходимо в каталоге найти некоторое количество, пусть 7 самых «свежих» файлов, а остальное удалить. Сделал это так:

rm -rf $(ls -lat | awk '{print $9}' | grep "^[^\.]" | awk 'FNR >= 7 {print}')

Здесь:

1. сначала выбираю все файлы и каталоги в текущем каталоге и сортирую по времени от самого свежего к самому старому — ls -lat.

2. В полученных результатах выбираю только столбик с именами файлов и каталогов: awk ‘{print $9}’.

3. Исключаю все имена файлов и каталогов, начинающиеся с точки: grep «^[^\.]».

4. Выбираю все строки, кроме первых семи: awk ‘FNR >= 7 {print}’.

5. Удаляю все, что получил в результате выражения в скобках: rm -rf $(expression).

P.S. почему-то не работает с именами файлов, в которых есть пробелы.

, , , , , , ,

Евгений18/04/2014 at 14:43Reply

имхо лучше find -mtime использовать, что-то типа
find . -mtime 7 | xargs rm

man find 🙂

alex21/04/2014 at 9:21Reply

Согласен, но почему-то не работало с find с 1-го раза, решил ман отложить немного и сделать «совсем подругому»))

Manish03/05/2014 at 3:56Reply

With the bases loaded you struck us out with that anresw!

Menu