Команда для удаления всех файлов из папок, соответствующих имени рекурсивно?

У меня есть базовая папка (назовем ее базовой).

У меня внутри куча папок, разбросанных по разным глубинам, внутри этих папок находятся кеш-папки.

Я хочу удалить все файлы из папок кеша, но не сами папки.

Я пытался

cd base
#then one of...
sudo rm -rf cache/*
sudo rm -rf *cache/*
sudo rm -rf cache*/*
sudo rm -rf *cache*/*

Но на самом деле я просто догадываюсь, какой будет правильная команда?

4
задан 9 July 2012 в 13:59

4 ответа

Вы можете использовать чрезвычайно мощную команду поиска.

Я бы использовал что-то вроде этого:

find . -iname *cache* -ok rm -rf {} \;

Теперь позвольте мне объяснить это для вас. Find - это имя приложения, у него много вариантов, но вам не нужно много из них.

. означает поиск в этом текущем каталоге. Это означает, что вы должны быть в правильном каталоге, чтобы начать с. Я предполагаю, что ~

-iname означает поиск в моем имени без учета регистра.

*cache* означает, что имя должно содержать кеш.

Теперь важна следующая часть.

-ok означает выполнять команды, которые следуют, но как я, если я хочу сделать это в первую очередь. Это можно заменить на -exec, но я бы не советовал. Это могло бы удалить вещи, не сказав вам, а вы этого не хотите.

Хорошо, следующая строка (которая запускает -ok): rm -rf {} \;

rm -rf Надеюсь, это само за себя. {} является в основном заполнителем для имени файла, который он нашел. \; в конце означает, что это конец этой строки.

Надеюсь, это имеет смысл.

Я советую запускать команду find без всякого права, включая -ok. Сначала он выкачает список всех файлов кэша, и вы можете просмотреть их. Затем добавьте раздел -ok и получите взлом!

0
ответ дан 9 July 2012 в 13:59

В bash вы можете включить globstar и использовать ** для рекурсивного сопоставления каталогов

shopt -s globstar
echo rm -rf ./**/*cache*/*

См. Сопоставление с образцом

0
ответ дан 9 July 2012 в 13:59

Просто замените basedir на путь к базовому каталогу, который вы хотите удалить

$ find basedir -type f -delete

Если вы чувствуете себя более комфортно, переходя к базовому каталогу, то:

$ cd basedir
$ find . -type f -delete
0
ответ дан 9 July 2012 в 13:59

Это рекурсивно удалит все файлы в папках с именем cache, начиная с папки base. Сами папки cache по-прежнему не повреждены, но все файлы в каждой из них будут удалены.

find base -ipath "*/cache/*" -type f -delete
0
ответ дан 9 July 2012 в 13:59

Другие вопросы по тегам:

Похожие вопросы: