#linux #ubuntu #find #exec #rm
#linux #ubuntu #Найти #exec #rm
Вопрос:
Я хочу написать простую команду для очистки файлов моего проекта, поэтому я использовал:
find . -type f -name "*.o" -o -name "*.a" -o -name "*.ko" -exec rm '{}'
Как ни странно, это не сработало. И когда я удалил » -exec rm ‘{}’ «, я увидел, что он выгрузил файлы из терминала, так что, похоже, мое выражение правильное. Я даже пытался изменить «‘{}’ » на «‘{}’ ;», но это также не сработало. Я также попытался заменить rm на echo, но в терминале ничего не отображалось. Я делаю что-то не так?
Использование Ubuntu 12.04.
Ответ №1:
Попробуйте использовать его следующим образом:
find . -type f ( -name "*.o" -o -name "*.a" -o -name "*.ko" ) -exec rm -f {} ;
При использовании нескольких файлов в find
сочетании с exec
ним часто действует только на последнее имя файла.
Комментарии:
1. Вы поняли! Большое спасибо.
2. Формулировка здесь немного сбивает с толку. Необходимость группировки на самом деле не имеет большого отношения к
-exec
и больше к приоритетуfind
дает свои параметры. А именно, большинство параметров имеют одинаковый приоритет до-or
тех пор, пока не будут введены ‘s, которые имеют меньшее присутствие. Поэтомуfind
исходный синтаксис будет рассматриваться как(-type f AND -name "*.o") OR (-name "*.a") OR (-name "*.ko" AND -exec rm '{}' )
3. Кроме
того, лучше, чем
;
, посколькуrm
может принимать в качестве аргументов ряд имен файлов, поэтомуfind
не нужно создавать новую подоболочку для каждого-exec
и будет работать быстрее.