Команда поиска с помощью -exec не запускает команду -exec

#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 и будет работать быстрее.