Сценарий оболочки для удаления всех файлов определенного типа в разных папках, кроме 10 последних

Прежде всего, прошу прощения за мой плохой английский.

Я пытаюсь написать сценарий оболочки для очистки некоторых файлов определенного типа в моих папках с резервными копиями.

Мне нужно удалить файлы определенного типа, кроме 10 самых новых в каждой папке.

Структура папок выглядит следующим образом:

Root folder
│
├── folder_1
│   ├── file_1.txt
│   └── file_2.txt
│   └── file_n.txt
│
├── folder_2
│   ├── file_1.txt
│   └── file_2.txt
│   └── file_n.txt
│
├── folder_n
│   ├── file_1.txt
│   └── file_2.txt
│   └── file_n.txt
│

Я использовал сценарий из Дэвида Фёрстера в качестве основы, но не могу понять, как заставить его работать в разных папках отдельно, не записывая вручную каждую имя папки в скрипте.

В настоящее время скрипт выглядит так:

find /volume1/rootfolder/ -type f -name *.txt -printf '%T@ %p\0' |
sort --zero-terminated --reverse --numeric-sort --field-separator=' ' --key 1,1 |
gawk -F ' ' -v RS='\0' -v ORS='\0' -v retain_count=10 \
  'BEGIN{ maxage = systime() - retain_younger_days * 24 * 3600; }
  (NR > retain_count) && (int($1) < maxage) { print(substr($0, length($1) + 2)); }' |
xargs -r0 -- rm --

Но проблема в том, что он удаляет все файлы во всех папках, кроме 10 последних. Итак, в целом у меня всего 10 файлов во всех папках, а не по 10 в каждой папке.

Помогите, пожалуйста, разобраться, как заставить скрипт обрабатывать каждую папку отдельно.

0
задан 17 November 2021 в 06:35

0 ответов

Другие вопросы по тегам:

Похожие вопросы: