У меня есть базовая папка (назовем ее базовой).
У меня внутри куча папок, разбросанных по разным глубинам, внутри этих папок находятся кеш-папки.
Я хочу удалить все файлы из папок кеша, но не сами папки.
Я пытался
cd base
#then one of...
sudo rm -rf cache/*
sudo rm -rf *cache/*
sudo rm -rf cache*/*
sudo rm -rf *cache*/*
Но на самом деле я просто догадываюсь, какой будет правильная команда?
Вы можете использовать чрезвычайно мощную команду поиска.
Я бы использовал что-то вроде этого:
find . -iname *cache* -ok rm -rf {} \;
Теперь позвольте мне объяснить это для вас. Find - это имя приложения, у него много вариантов, но вам не нужно много из них.
.
означает поиск в этом текущем каталоге. Это означает, что вы должны быть в правильном каталоге, чтобы начать с. Я предполагаю, что ~
-iname
означает поиск в моем имени без учета регистра.
*cache*
означает, что имя должно содержать кеш.
Теперь важна следующая часть.
-ok
означает выполнять команды, которые следуют, но как я, если я хочу сделать это в первую очередь. Это можно заменить на -exec
, но я бы не советовал. Это могло бы удалить вещи, не сказав вам, а вы этого не хотите.
Хорошо, следующая строка (которая запускает -ok
): rm -rf {} \;
rm -rf
Надеюсь, это само за себя. {}
является в основном заполнителем для имени файла, который он нашел. \;
в конце означает, что это конец этой строки.
Надеюсь, это имеет смысл.
Я советую запускать команду find без всякого права, включая -ok
. Сначала он выкачает список всех файлов кэша, и вы можете просмотреть их. Затем добавьте раздел -ok
и получите взлом!
В bash вы можете включить globstar и использовать **
для рекурсивного сопоставления каталогов
shopt -s globstar
echo rm -rf ./**/*cache*/*
Просто замените basedir на путь к базовому каталогу, который вы хотите удалить
$ find basedir -type f -delete
Если вы чувствуете себя более комфортно, переходя к базовому каталогу, то:
$ cd basedir
$ find . -type f -delete
Это рекурсивно удалит все файлы в папках с именем cache
, начиная с папки base
. Сами папки cache
по-прежнему не повреждены, но все файлы в каждой из них будут удалены.
find base -ipath "*/cache/*" -type f -delete