Я пытаюсь написать команду bash, которая удалит все файлы, соответствующие определенному шаблону - в данном случае это все старые файлы журнала vmware, которые были созданы.
Я пробовал эту команду:
find . -name vmware-*.log | xargs rm
Однако когда я запускаю команду, она заглушает все папки, в именах которых есть пробелы. Есть ли способ отформатировать путь к файлу, чтобы xargs передавал его в кавычки или правильно экранировал?
Ответы:
Я обычно нахожу, что использование этой
-exec
опции дляfind
облегчения и менее запутанным. Попробуй это:Все после
-exec
считается командой для выполнения для каждого результата, вплоть до того;
, который здесь экранируется, так что он будет переданfind
. Символ{}
заменяется именем файла,find
которое обычно печатается.После того, как вы убедились, что он делает то, что вы хотите, вы можете удалить
-i
.источник
Если у вас есть GNU,
find
вы можете использовать-delete
опцию:Чтобы использовать
xargs
и избежать проблемы с пробелами в именах файлов:Однако в ваших файлах журналов не должно быть пробелов в их именах. Документы для обработки текстов и файлы MP3, скорее всего, будут иметь их, но вы должны иметь возможность контролировать имена файлов журналов.
источник
Вы можете указать
find
разделять выходной список значениями NULL иxargs
получать его входной список так же:Кроме того, убедитесь, что вы избежали
*
, либо с обратной косой чертой, либо, заключив ихvmware-*.log
в одинарные кавычки, в противном случае ваша оболочка может попытаться расширить ее перед передачейfind
.источник
Не забудьте
-delete
вариант поиска . Он удаляет файл без ошибок с помощью специальных символов ...источник