bash:подсчет_и_удаление_самых_старых_файлов

Предположим, у нас есть директория, с несколькими файлами:

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
  • bash/подсчет_и_удаление_самых_старых_файлов.txt
  • Последнее изменение: 2022/04/25 09:10
  • admin