Подсчет и удаление самых старых файлов
Предположим, у нас есть директория, с несколькими файлами:
ls -t ./files ls -t files/ my_test18.txt my_test10.txt my_test12.txt my_test14.txt my_test16.txt my_test1.txt my_test11.txt my_test13.txt my_test15.txt my_test17.txt
Параметр -t
сортирует файлы по времени модификации – самый новый файл отображается первым. Как видим, my_test18.txt
– самый новый файл, а my_test17.txt
– самый старый.
Создаем скрипт. В качестве аргумента он должен получить ограничение на количество файлов:
- count_then_remove.sh
#!/bin/bash # Print usage if requested. if [[ $1 == "--help" || $1 == "-h" ]] then echo "Usage: $0 [files limit]" exit 0 fi # The script receives the limit as an argument. limit=$1 number_of_files=$(ls ./files | wc -l) if [ $number_of_files -gt $limit ] then # There are more files than the limit # So we need to remove the older ones. cd files ls -t | tail --lines=+$(expr $limit + 1) | xargs -d '\n' rm fi
- В приведенном выше коде
wc -l
подсчитывает файлы в./files
ls -t
перечисляет файлы по времени модификации и ставит самый новый файл первымtail --lines=+$(expr $limit + 1)
выводит файлы, которые идут сразу после ограничения. Таким образом, получаем список файлов для удаления.xargs -d '\n'
, используя символ новой строки в качестве разделителя, передает каждый файл команде rm в качестве аргумента
Выполняем скрипт
./count_then_remove.sh 5
ls -t ./files my_test18.txt my_test1.txt my_test10.txt my_test11.txt my_test12.txt