У меня есть каталог, содержащий большое количество файлов (например, журналы на каждый день года). Я хотел бы удалить все файлы, созданные до, скажем, 22/11. Как я могу этого достичь? Должен ли я использовать find
тогда exec -rm
? Я использую кш.
У меня есть каталог, содержащий большое количество файлов (например, журналы на каждый день года). Я хотел бы удалить все файлы, созданные до, скажем, 22/11. Как я могу этого достичь? Должен ли я использовать find
тогда exec -rm
? Я использую кш.
Ответы:
Использование find
по-прежнему является предпочтительным способом удаления файлов. Смотрите http://mywiki.wooledge.org/UsingFind для получения дополнительной информации.
Один из способов сделать это - создать файл с отметкой времени. например
touch -t 201311220000 /tmp/timestamp
Теперь удалите файлы GNU find
(предположим, в текущем каталоге), которые соответствуют отметке времени, например:
find . -type f ! -newer /tmp/timestamp -delete
или не GNU найти
find . -type f ! -newer /tmp/timestamp -exec rm {} \;
type -f
ограничено только файлами.
С GNU или некоторыми BSD find
:
find . ! -newermt 2013-11-22 ! -type d -delete
Обратите внимание, что он проверяет время последнего изменения файлов. На некоторых BSD вы можете использовать -newerBt
вместо, -newermt
чтобы проверить время рождения inode файла, если доступно вместо этого.
find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;
пример:
find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;
В этом случае он удалит все файлы, которые начинаются с "ORA_XEO" более 15 дней.
rm -rf
, первая команда удалит все содержимое любых каталогов старше 15 дней. (Кроме того, почему круглые скобки -name
?)
example.jar
- это будет удалено example.cp
- это будет удалено example.tar
- это не будет удалено
find /path/to/directory/ -mtime +<number of days> \( -name '*.jar' -o -name '*.cp' \) -name 'ex*' -exec rm -rf {} \;
find
вы должны использовать -daystart
модификатор, чтобы привести -mtime
значение к полуночи.