Я использую Amazon Linux. У меня есть этот оператор, предназначенный для удаления файлов в каталоге
/bin/find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \;
Но это приводит к кучке таких операторов, как этот
/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deployment2b6836209f40596a': No such file or directory
/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deployment1fae3ca49edb3384': No such file or directory
/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deploymenta2b0c99bfdd7f444': No such file or directory
...
Есть ли способ, чтобы мой оператор не сканировал файлы, которые не существуют, или, по крайней мере, исключил все эти ошибки?
Помните, что ваша команда удаляет каталоги, которые не менялись в течение дня, даже если некоторые файлы в них изменились недавно.
Предполагая, что это именно то, что вы хотите, Стефан Шазелас и Триг предложили в комментариях два решения. Проблема, с которой вы столкнулись, заключается в том, что вы даете команду find
удалить каталог, а затем он пытается пройти по нему, чтобы увидеть, есть ли в нем какие-либо файлы, которые будут соответствовать.
Передайте -depth
, чтобы указать find
обрабатывать сначала содержимое каталога, а потом - сам каталог. Это тратит немного времени на анализ содержимого каталогов, которые будут удалены чуть позже.
find $ JBOSS_HOME / standalone / tmp / vfs -depth -mindepth 1 -mmin +1441 -exec rm -rf {} \; {1}}
Используйте -prune
, чтобы указать find
, чтобы не исследовать удаляемые каталоги.
найти $ JBOSS_HOME / standalone / tmp / vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \; -prune
Если вы хотели удалить только старые файлы, дайте знать find
. Вы можете использовать -delete
вместо вызова rm
.
find $JBOSS_HOME/standalone/tmp/vfs -mmin +1441 -type f -delete
Затем вы можете удалить пустые каталоги:
find -depth $JBOSS_HOME/standalone/tmp/vfs -type d -empty -delete
Или объединить два, удалив каталоги после удаления любого файла в них, который должен быть удален:
find $JBOSS_HOME/standalone/tmp/vfs -depth -mindepth 1 -mmin +1441 -type f -delete -o -type d -empty -delete