Что-то вроде:
find /home/deployer/Data_Sources -maxdepth 1 -mindepth 1 -type d > afile
while IFS= read -r subdir
do
find "$subdir" -mtime +90 -type f -printf "%T+\t%p\n" \
| sort \
| head -n-1 \
| sed 's|[[:blank:]]\+| |' \
| cut -f 2 -d " " > bfile
while IFS= read -r each
do
rm -vf "$each"
done < bfile
done < afile
rm -f bfile afile
Объяснение:
найти все каталоги в /home/deployer/Data_Sources
в непосредственной директории (-maxdepth 1
) и исключая себя (-mindepth 1
), и дамп это в файл с именем afile
find /home/deployer/Data_Sources -maxdepth 1 -mindepth 1 -type d > afile
Прочтите каждую строчку от afile
и храните в enviro nment переменная subdir
(см done
линии этого цикла, чтобы увидеть, что afile
в настоящее время поступает в контур while
)
while IFS= read -r subdir
do
Выполнить команду find
на каждый subdir
, перечисляя только файлы старше 90 дней (и распечатать временную метку с файлом)
find "$subdir" -mtime +90 -type f -printf "%T+\t%p\n" \
sort
выходе из find
| sort \
захватить все, кроме последней строки sort
вывода (последняя строка нового файла)
| head -n-1 \
заменить все многочисленные пробелы в одном пространстве
| sed 's|[[:blank:]]\+| |' \
захватить второй столбец из выход, определяющий пространство как разделитель; все сбрасываются в файл под названием bfile
.(Может, вероятно, использовать вкладку в качестве разделителя как-то и не использовать sed
выше, но я не был уверен, как определить его так, что это будет работать, -d "\t"
, конечно, не сделать трюк)
| cut -f 2 -d " " > bfile
Теперь, прочитать bfile
строки за строкой и хранить в each
переменном окружении (опять-таки: Смотрите сделать линии, чтобы показать bfile
будучи конвейер в)
while IFS= read -r each
do
на самом деле сделать удаление старых файлов (быть многословными и подавляя подсказку)
rm -vf "$each"
done < bfile
done < afile
удалить временные файлы bfile
и afile
rm -f bfile afile
Примечание:
-Обновленное удалить использование for
петель, чтобы правильно обрабатывать специальные символы и пробелы в путях; также двойные кавычки по переменным (как предложено @ mklement0)
Спасибо! Я просто хочу убедиться, что я на правильном пути, вы можете сделать это с помощью подпапок. Я имею в виду, как указать подпапки здесь, потому что есть 5. Может ли это быть/Data_Sources и все? например: для каждого в $ (find/home/deployer/Data_Sources/-mtime +90-type f -printf "% T + \ t% p \ n" \ Я не уверен, что произойдет после Data_sources. Еще раз спасибо – Rohamsk
@Rohamsk: Я думаю, у меня есть то, что вы запрашивали сейчас. – ryry1985
@Rohamsk: исправлена ошибка Я нашел – ryry1985