Прежде всего, прошу прощения за мой плохой английский.
Я пытаюсь написать сценарий оболочки для очистки некоторых файлов определенного типа в моих папках с резервными копиями.
Мне нужно удалить файлы определенного типа, кроме 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 в каждой папке.
Помогите, пожалуйста, разобраться, как заставить скрипт обрабатывать каждую папку отдельно.