2016-08-02 10 views
2

Я использую эту команду, чтобы попытаться удалить все файлы Thumbs.db в очень большой папке. Я думал, что -f должен принудительно удалить, не запрашивая подтверждение, но мне все еще предлагается «y» или «n» для каждого файла.`rm -f` запрашивает подтверждение, когда aliased как` rm -i`

find "megapacks" -name Thumbs.db -ok rm -f {} \; 

Я попытался type rm, чтобы увидеть, если там был псевдоним, и он ответил

ет псевдонимы для `ет -i«

Я попытался с помощью /bin/rm, но вместо этого я» м все еще запрашивается

find "megapacks" -name Thumbs.db -ok /bin/rm -f {} \; 

У кого-нибудь есть идея о том, как избежать подтверждения?

+1

Используйте '-delete' вместо этого? – fedorqui

+0

Обратите внимание, что псевдонимы не расширены для аргументов команд, что и будет 'rm'. – chepner

+0

'unalias rm', прежде чем вы потеряете всякую осторожность в том, чтобы указывать пистолет на ногу. –

ответ

4

Проблема с -ok вариант, который в соответствии с man find:

Как -exec но спросить у пользователя первое. Если пользователь согласен, запустите команду. В противном случае просто верните false.

Это должно работать для вас с -exec:

find "megapacks" -name Thumbs.db -exec /bin/rm -f {} \; 

или быстрее:

find "megapacks" -name Thumbs.db -exec /bin/rm -f {} + 
+1

спасибо, что ты прав, это разрешено – robjbrain

2

Но я думаю, что проблема в том, что вы передаете -ok к find, который

Как -exec но спросить у пользователя первое.

Если псевдоним были проблемы, просто отключенное псевдоним:

unalias rm 

Обратите внимание, что это влияет только на текущий сеанс работы с оболочкой.

Вы также можете использовать опцию -delete для find:

find "megapacks" -name Thumbs.db -delete