Получение сообщения «Нет такого файла или каталога» при удалении каталогов с помощью find

Я использую 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
...

Есть ли способ, чтобы мой оператор не сканировал файлы, которые не существуют, или, по крайней мере, исключил все эти ошибки?

0
11.03.2017, 01:13
1 ответ

Помните, что ваша команда удаляет каталоги, которые не менялись в течение дня, даже если некоторые файлы в них изменились недавно.

Предполагая, что это именно то, что вы хотите, Стефан Шазелас и Триг предложили в комментариях два решения. Проблема, с которой вы столкнулись, заключается в том, что вы даете команду 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
2
28.01.2020, 02:34

Теги

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