2012-06-18 4 views
4

Я хочу удалить все файлы в каталоге с заданным именем, кроме одного с заданным расширением. То есть у нас есть каталог с:Использование find для удаления всех файлов с заданным именем, кроме одного с заданным расширением

foo.txt foo.exe foo.jpg foo.png foo.something foo.somethingelse bar.jpg bar.exe 

Я хочу, чтобы избавиться от foo.txt foo.jpg foo.png foo.something foo.somethingelse

НО самое главное, я не хочу, чтобы избавиться от foo.exe

Есть простой один лайнер, чтобы сделать это?

Спасибо

+0

http://superuser.com/questions/193631/when-running-rm-rf-is-it-possible-to-exclude-certain-subdirectories –

ответ

7

Вы можете использовать ! внутри команды find исключить вещи, так что-то вроде:

find . -maxdepth 1 -type f -name "foo.*" ! -name foo.exe -exec rm '{}' \; 
     ----------- ------- ------------- --------------- ---------------- 
     in this dir files named foo.* but not foo.exe ...destroy them. 

Это должны удалить файлы, соответствующие foo.* в текущем каталоге, но оставить foo.exe в покое.

+0

Не будет 'находить' то, как у вас есть это сейчас и искать и находить (и в этом случае удалять) файлы в подкаталогах? – Levon

+0

@ Levon: отличная точка - использование maxdepth = 1 ограничивает текущий каталог. –

+0

Вернулась с: нахожу. -type f -maxdepth 1 -name "foo. *"! -name foo.exe -exec rm '{}' \; find: warning: вы указали опцию -maxdepth после аргумента аргумента non-option, но параметры не являются позиционными (-maxdepth влияет на тесты, указанные перед ним, а также те, которые указаны после него). Пожалуйста, укажите параметры перед другими аргументами. –

Смежные вопросы