Использованиеsed
:
$ sed -n '/is the/s/^.*blah:\([0-9]*\);.*$/\1/p' file | sort -u
1
10
108636
1194996
4321
9876
Подстановка заменяет содержимое всех строк, содержащих строку is the
, числом от blah:
до ;
. Строки, не содержащие строку, игнорируются.
Вы можете сначала добавить пустые каталоги 7-дневной давности во временный файл и запустить удаление файла. Затем найдите пустые каталоги и проверьте файл.
dirs_mtime7=$(mktemp) ## Create a temp file.
find "$CDIR" -type d -mtime +7 >> "${dirs_mtime7}"
##
## File deletion find command goes HERE...
##
while IFS= read -r -d '' a; do
grep -q -F -f "${dirs_mtime7}" <<< "${a}" && rmdir -v "${a}"
done < <(find "$CDIR" -type d -empty -print0)
Так как они только устаревают, вы можете просто добавить во временный файл новые 7 дней + каталоги. Создайте каталог dirs _mtime7 только один раз и добавьте в него.
Сzsh
(и GNU find
или совместимо с-delete
):
cd -P -- "$CDIR" || exit
old_dirs=(**/*(DNm+6))
find. -mtime +6 ! -type d -delete
empty_old_dirs=($^old_dirs(N^F))
(($#empty_old_dirs == 0)) || rmdir -- $empty_old_dirs
Обратите внимание, что квалификатор glob -mtime
и zsh
's m
работает с возрастом в целочисленном (округленном вниз )количестве дней. -mtime -6
для возраста строго младше 6 лет, -mtime 6
для возраста 6 лет (таким образом, между 6 и 7 днями )и -mtime +6
для этого возраста строго больше 6, поэтому 7 дней и выше.
Таким образом, для файлов, которым более 7 дней, вам нужен -mtime +6
, а не -mtime +7
(, по крайней мере, с POSIX-совместимыми реализациями find
, не все, но в этом отношении есть GNU ).