Как найти и удалить самый старый файл в каталоге в 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 для вывода, начиная со строки NUMxargs
: создает и выполняет командные строки из стандартного ввода.rm -f
: удалить файлы или каталоги.f
указывает игнорировать несуществующие файлы и аргументы, никогда не запрашивать. Это означает, что эта команда не будет отображать сообщения об ошибках, если файлов меньше 10.|
— это конвейер. Обычно это последовательность из одной или нескольких команд, разделенных одним из управляющих операторов|
или|&
.
Таким образом, приведенная выше команда удалит самые старые файлы, если в текущем рабочем каталоге имеется более 10 файлов. Чтобы проверить, сколько файлов находится в каталоге после удаления самых старых файлов, просто запустите:
ls | wc -l
Обновление:
Если имена файлов содержат пробелы, приведенная выше команда не будет работать. Потому что команда xargs
использует пробельные символы (табуляция, пробелы, новые строки) в качестве разделителей. В этом случае вы можете сузить его только для символов новой строки ('\n'
) с помощью опции -d
, как показано ниже:
ls -1t | tail -n +11 | xargs -d '\n' rm -f
Надеюсь это поможет.
Рекомендуется прочитать:
- Как найти и удалить файлы старше X дней в Linux
- Удалить файлы, к которым не было доступа в течение определенного времени в Linux