Удалить весь тип файла из каталога и его дочерних элементов
У меня сложилось впечатление, что
rm -r *.xml
удалит все файлы из родительского и дочернего:
*.xml: No such file or directory
Ответы
Ответ 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-документы на тему здесь.