Какая команда `find` удаляет все в каталоге, кроме папок CVS?

269
kev

У меня есть каталог:

$ tree . |-- CVS | |-- Entries | |-- Entries.Log | |-- Repository | `-- Root |-- dirA | |-- CVS | | |-- Entries | | |-- Repository | | `-- Root | |-- file1 | `-- file2 |-- dirB | |-- CVS | | |-- Entries | | |-- Repository | | `-- Root | |-- file3 | `-- file4 |-- file5 `-- file6 

Я могу найти все файлы, которые хочу удалить, с помощью этой команды:

$ find . -name CVS -prune -o -type f -print 

Но если я перейду -printна-delete

$ find . -name CVS -prune -o -type f -delete 

Все ушли. Зачем?

1

1 ответ на вопрос

3
Daniel Andersson

Посмотрите на страницы findруководства для -delete:

При тестировании командной строки find, которую вы позже намереваетесь использовать с -delete, вы должны явно указать -depth, чтобы избежать последующих неожиданностей. Поскольку -delete подразумевает -depth, вы не можете использовать вместе -prune и -delete вместе.

Вы можете, скорее всего, просто использовать -exec rm {} +вместо -deleteв этом контексте, чтобы делать то, что вы хотите, но, как всегда, когда играет с огнем: сделать очень уверен, что это работает, прежде чем в трудно.