Comando para excluir todos os arquivos das pastas correspondentes ao nome recursivamente?

4

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?

    
por Hailwood 09.07.2012 / 11:51

4 respostas

8

No bash, você pode ativar o globstar e usar ** para corresponder aos diretórios recursivamente

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

Veja Correspondência de padrões

    
por geirha 09.07.2012 / 12:01
3

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
    
por Flint 09.07.2012 / 12:15
1

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!

    
por SuperMatt 09.07.2012 / 12:03
1

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
    
por jap1968 09.07.2012 / 12:32