У нас есть каталог Linux, куда ежедневно добавляются файлы и каталоги.

Нам нравится управлять этим списком файлов и подкаталогов в каталоге, фиксируя список до 50 самых последних файлов и каталогов в любой момент времени.

Как мы пишем сценарий для достижения этой цели?

2 ответа2

0

Благодаря GNU find и sort , вы получите 50 последних файлов и их временную метку из текущего каталога:

find . -mindepth 1 -maxdepth 1 -printf '%T@ %p\n' | sort -n | tail -n 50

Передайте их во while read чтобы получить каждое имя файла:

find . -mindepth 1 -maxdepth 1 -printf '%T@ %p\n' |
sort -n | tail -n 50 |
while read -r ts file; do echo rm -rf -- "$file"; done

Здесь printf выводит сортируемую временную метку, которую будет использовать числовая sort . Мы получаем самые старые 50 файлов или каталогов и удаляем каждый в отдельности. Удалите echo в сценарии, чтобы фактически выполнить команды.

Обратите внимание, что это не работает, если ваши файлы / каталоги содержат новую строку в своем имени. Такое случается не часто, но будьте внимательны, чтобы проверить. Из-за характера read , он также не будет работать, если есть начальные или конечные пробелы.

Дополнительные идеи см .: BashFAQ/003 - Как найти самый последний (самый новый, самый старый, самый старый) файл в каталоге?

-3

Если вам нужно посмотреть только каталоги в папке (не для subdir), выполните скрипт:

#!/bin/bash
l=$(ls |wc -l)
n=$[$l-50]
rm -rf `ls -1t|tail -$n`

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .