mtime изменяется при попытке удалить файлы, за которыми следуют каталоги. Лучший способ удалить файлы и каталоги.?

Использованиеsed:

$ sed -n '/is the/s/^.*blah:\([0-9]*\);.*$/\1/p' file | sort -u
1
10
108636
1194996
4321
9876

Подстановка заменяет содержимое всех строк, содержащих строку is the, числом от blah:до ;. Строки, не содержащие строку, игнорируются.

0
18.09.2019, 23:17
2 ответа

Вы можете сначала добавить пустые каталоги 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 только один раз и добавьте в него.

0
28.01.2020, 02:39

С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 ).

1
28.01.2020, 02:39

Теги

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