Почему эта команда удалила все?

Почему эта команда удалила все?

Я запускаю эту команду на компьютере Unix:

find . name CVS -exec rm -fr {} \;

Я хотел удалить любой файл, вызванный CVSв любом каталоге из текущего каталога, и он удалил все.

К счастью, все, что мне пришлось сделать для восстановления, это снова извлечь данные из CVS. Представьте, если бы я указал /начальный каталог!

Я думаю, причина в том, что я использовал nameвместо -name. Я просто перезапустил его как

find . -name CVS -exec rm -fr {} \;

И, кажется, это работает нормально. Что именно происходит, если nameиспользуется вместо -name?

решение1

Вы пропустили тире раньше -name, поэтому он искалпутис именем ., nameи CVS, где точка ссылается на текущую папку, следовательно, удаляя все.

Утилита find рекурсивно просматривает дерево каталогов для каждого указанного пути.

Вы можете легко проверить это, используя echoперед командой, которую хотите выполнить:

найти . имя CVS -exec echo rm -fr {} \;

Связанный контент