Подтвердить что ты не робот

Удалить весь тип файла из каталога и его дочерних элементов

У меня сложилось впечатление, что

rm -r *.xml

удалит все файлы из родительского и дочернего:

*.xml: No such file or directory
4b9b3361

Ответ 1

В справочной странице rm говорится:

 -r, -R, --recursive
          remove directories and their contents recursively

Это означает, что флаг -r ожидает каталог. Но *.xml не является каталогом.

Если вы хотите удалить все .xml файлы из текущего каталога, рекурсивно ниже, выполните команду:

find . -name "*.xml" -type f|xargs rm -f

Ответ 2

Я предполагаю, что вы хотите удалить все *.xml файлы рекурсивно (в текущем и во всех подкаталогах). Для этого используйте find:

find . -name "*.xml" -exec rm {} \;

На стороне примечание, рекурсивное удаление пугает меня. В мои более суровые дни я склонен предшествовать этому шагу:

find . -name "*.xml" 

(без бита -exec), чтобы увидеть, что можно удалить, прежде чем совершать прыжок. Я советую вам поступать так же. Ваши файлы будут вам благодарны.

Ответ 3

более красивый способ, хотя этот вариант менее поддерживается в Unix-системах:

rm -rf */*.xml

это приведет к удалению xml файлов из всех подкаталогов текущего каталога.

Ответ 4

Чтение этого ответа на поиск пустых каталогов unix, я только что узнал о действии -delete:

-delete
          Delete  files; true if removal succeeded.  If the removal failed, an error message is issued.  If -delete fails, find exit status will be nonzero (when it even‐
          tually exits).  Use of -delete automatically turns on the -depth option.

          Warnings: Don't forget that the find command line is evaluated as an expression, so putting -delete first will make find try to delete everything below the start‐
          ing  points  you  specified.   When  testing a find command line that you later intend to use with -delete, you should explicitly specify -depth in order to avoid
          later surprises.  Because -delete implies -depth, you cannot usefully use -prune and -delete together.

Источник: человек находит

Это означает, что вы также можете удалить все xml файлы так:

find . -name "*.xml" -type f -delete

Ответ 5

Легкий способ сделать это

rm -f *.xml

Это приведет к удалению всех .xml файлов из текущего каталога.

Ответ 6

ZSH рекурсивный глобус на помощь!

Вызвать zsh: zsh

Убедитесь, что вы находитесь в каталоге, на котором вы собираетесь: cd wherever

Список первых: ls **/*.xml

Remove: rm **/*.xml

Я буду сопротивляться сильному соблазну bash on bash и просто укажу на соответствующие zsh-документы на тему здесь.