No bash, você pode ativar o globstar e usar **
para corresponder aos diretórios recursivamente
shopt -s globstar
echo rm -rf ./**/*cache*/*
Eu tenho minha pasta base (vamos chamá-la de base).
Eu tenho um monte de pastas dentro, espalhadas em várias profundidades dentro dessas pastas são pastas de cache.
Eu quero excluir todos os arquivos das pastas de cache, mas não das próprias pastas.
Eu tentei
cd base
#then one of...
sudo rm -rf cache/*
sudo rm -rf *cache/*
sudo rm -rf cache*/*
sudo rm -rf *cache*/*
Mas, na verdade, estou apenas adivinhando qual seria o comando certo?
No bash, você pode ativar o globstar e usar **
para corresponder aos diretórios recursivamente
shopt -s globstar
echo rm -rf ./**/*cache*/*
Isso excluirá recursivamente todos os arquivos das pastas denominadas cache
, iniciando na pasta base
. As pastas cache
em si ainda estarão intactas, mas todos os arquivos dentro de cada um serão removidos.
find base -ipath "*/cache/*" -type f -delete
Você pode usar o poderoso comando extremamente find.
Eu usaria algo assim:
find . -iname *cache* -ok rm -rf {} \;
Agora, deixe-me explicar isso para você. Encontrar é o nome do aplicativo, ele tem muitas opções, mas você não precisará de muitas delas.
O .
significa procurar neste diretório atual. Isso significa que você terá que estar no diretório correto para começar. Eu assumo para você que é ~
-iname
significa pesquisar meu nome insensível ao caso.
*cache*
significa que o nome deve conter cache.
Agora, a próxima parte é importante.
-ok
significa executar os comandos que seguem, mas como eu, se eu quiser fazê-lo primeiro. Isso pode ser substituído por -exec
, mas eu não aconselharia. Isso excluiria as coisas sem dizer a você e você não quer isso.
Ok, a próxima linha (que é o material que -ok
executa) é rm -rf {} \;
O rm -rf
que espero é auto-explicativo. O {}
é basicamente um espaço reservado para o nome do arquivo encontrado. O \;
no final significa apenas que é o fim dessa linha.
Espero que isso faça sentido.
Eu aconselho a execução do comando find sem o direito de tudo e incluindo -ok
. Ele irá mostrar uma lista de todos os arquivos de cache primeiro e você poderá revisá-los. Em seguida, adicione a seção -ok
e comece a quebrar!
Basta substituir basedir pelo caminho do diretório base que você deseja remover
$ find basedir -type f -delete
Se você se sentir mais confortável se mudar anteriormente para o seu diretório base, então:
$ cd basedir
$ find . -type f -delete
Tags command-line bash rm