Удалить все, кроме самого нового файла из всех подкаталогов - PullRequest
0 голосов
/ 23 апреля 2020

Я нашел следующее, в котором перечислены файлы во всех подкаталогах, спрятаны последние 5, а затем удалены остальные:

find -type f -printf '%T@ %P\n' | sort -n | cut -d' ' -f2- | head -n -5 | xargs rm

К сожалению, если я не знаю, сколько существует подкаталогов, он не удалит правильное количество файлов. У кого-нибудь есть способ пересечь каждый каталог, а затем удалить все, кроме самого нового файла в каждом подкаталоге?

Структура каталогов будет следующей:

-> Базовый каталог -> Родительский каталог -> Дочерний каталог

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Я обнаружил, что смог сделать то, что мне нужно было сделать со следующим одним вкладышем:

find . -name *.* -mmin +59 -delete > /dev/null
0 голосов
/ 23 апреля 2020

Я бы написал сценарий.

Это была бы рекурсивная функция:

  • функция вызова: rm_files (base_dir)
  • список всех каталогов
  • , если есть каталоги go через список и вызвать rm_files (act_dir) для каждого элемента
  • else (если нет каталогов):
    • перечислить все файлы
    • удалить все файлы, кроме самых новых
  • возврат из функции

В случае большого количества подкаталогов может возникнуть проблема с памятью из-за рекурсивной функции.

...