удалить все типы файлов из каталога и его дочерних элементов - PullRequest
30 голосов
/ 17 августа 2011

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

rm -r *.xml

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

*.xml: No such file or directory

Ответы [ 6 ]

46 голосов
/ 17 августа 2011

Справочная страница rm гласит:

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

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

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

find . -name "*.xml" -type f|xargs rm -f
28 голосов
/ 17 августа 2011

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

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

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

find . -name "*.xml" 

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

3 голосов
/ 30 ноября 2013

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

-delete
          Delete  files; true if removal succeeded.  If the removal failed, an error message is issued.  If -delete fails, find's 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
3 голосов
/ 20 августа 2013

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

rm -rf */*.xml

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

2 голосов
/ 24 января 2017

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

Вызов zsh: zsh

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

Сначала перечислите: ls **/*.xml

Удалить: rm **/*.xml

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

0 голосов
/ 23 сентября 2015

Простой способ сделать это -

rm -f * .xml

Это удалит все XML-файлы из текущего каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...