Поиск по сайту:

Как найти и удалить самый старый файл в каталоге в Linux

У меня на жестком диске много фильмов, и я храню их в разных папках в зависимости от жанра. Теперь я хочу сохранить в каталоге только определенное количество файлов фильмов и удалить все остальное. Что еще более важно, я хочу удалить только самые старые файлы. Таким образом, я могу поддерживать постоянное количество файлов в каждой папке. Поскольку у меня так много файлов, разбросанных по множеству папок, переход к каждой папке, поиск самых старых файлов и удаление их вручную по одному занимает довольно много времени. В поисках простого способа сделать это я нашел следующее решение. Читай дальше. Это не так уж и сложно.

Найти и удалить самый старый файл в каталоге в Linux

Допустим, вы хотели найти и удалить самый старый файл, если в каталоге более 10 файлов. Как бы вы поступили? Это очень просто.

В качестве примера возьмем следующий каталог с именем ostechnix. Давайте проверим, сколько файлов в этом каталоге, с помощью команды:

find ostechnix/ -type f | wc -l

Или перейдите в этот каталог и запустите:

ls | wc -l

Пример вывода:

33

Подсчет файлов в каталоге

Как вы видите в приведенном выше примере, каталог ostechnix содержит 33 файла. Мне не нужно 33 файла в этом каталоге. Я хочу удалить все самые старые файлы и оставить только 10 файлов.

Теперь давайте найдем и удалим самые старые файлы в этом каталоге, если они содержат более 10 файлов. Для этого перейдите в этот каталог:

cd ostechnix

И выполните следующую команду:

ls -1t | tail -n +11 | xargs rm

Или,

ls -1t | tail -n +11 | xargs rm -f

Где,

  • ls : список содержимого каталога.
  • -1t : 1 (число один) указывает, что вывод ls должен содержать один файл в строке. t указывает сортировку содержимого по времени изменения, сначала самое новое.
  • tail : вывести последнюю часть файлов.
  • -n +11 : вывести последние NUM строк вместо последних 10; или используйте -n +NUM для вывода, начиная со строки NUM
  • xargs : создает и выполняет командные строки из стандартного ввода.
  • rm -f : удалить файлы или каталоги. f указывает игнорировать несуществующие файлы и аргументы, никогда не запрашивать. Это означает, что эта команда не будет отображать сообщения об ошибках, если файлов меньше 10.
  • | — это конвейер. Обычно это последовательность из одной или нескольких команд, разделенных одним из управляющих операторов | или |&.

Таким образом, приведенная выше команда удалит самые старые файлы, если в текущем рабочем каталоге имеется более 10 файлов. Чтобы проверить, сколько файлов находится в каталоге после удаления самых старых файлов, просто запустите:

ls | wc -l

Обновление:

Если имена файлов содержат пробелы, приведенная выше команда не будет работать. Потому что команда xargs использует пробельные символы (табуляция, пробелы, новые строки) в качестве разделителей. В этом случае вы можете сузить его только для символов новой строки ('\n') с помощью опции -d, как показано ниже:

ls -1t | tail -n +11 | xargs -d '\n' rm -f

Надеюсь это поможет.

Рекомендуется прочитать:

  • Как найти и удалить файлы старше X дней в Linux
  • Удалить файлы, к которым не было доступа в течение определенного времени в Linux

Статьи по данной тематике