Como remover apenas o conteúdo dos diretórios?

14

Eu estou em uma pasta: /var/myfolder .

Dentro há outras pastas como: /var/myfolder/A/ /var/myfolder/B/ '/var/myfolder/C/ etc.

Dentro de cada um, existem alguns arquivos com nomes aleatórios. Como faço para remover todos os arquivos de todas as pastas dentro de /var/myfolder ?

A estrutura (todos os diretórios, por exemplo, A, B, C etc., dentro de /var/myfolder ) deve permanecer intacta.

    
por IroeN 21.08.2012 / 01:06

8 respostas

17

Tente:

find /var/myfolder -type f -delete

Isso obtém todos os arquivos regulares em / var / myfolder e os exclui deixando apenas os diretórios.

    
por 21.08.2012 / 01:12
7

Com o zsh, use o qualificador de glob . para corresponder apenas aos arquivos regulares :

rm -- **/*(.)

Isso exclui todos os arquivos regulares (não ocultos) no diretório atual e seus subdiretórios recursivamente. Adicione o qualificador D glob para excluir arquivos regulares ocultos (e arquivos regulares em diretórios ocultos) também.

    
por 21.08.2012 / 01:15
3

Você pode executar rm */* em /var/myfolder

    
por 22.08.2012 / 20:21
3
find . -depth -exec rm {} + 2>/dev/null

rm não remove diretórios - basta executá-lo em tudo.

Para preservar links simbólicos para diretórios:

find .  ! -type d -exec sh -c '
    for f do [ -d  "$f" ] || 
          set "$@" "$f";  shift
    done; rm  "$@"' sh  {} +

E eu acho que isso também deve funcionar, talvez, de uma maneira um pouco otimizada, se houver um lote de arquivos que possam precisar de testes na versão acima:

find . ! \( -type l -o -type d \)  \
-exec  rm {} + -o -exec  sh -c '
       for f do [ -d "$f" ] ||
       unlink "$f";done' sh {} +
    
por 22.01.2016 / 07:49
1
# This will delete all directory contents, including hidden files and
# subdirectories, without deleting the directory itself

# With GNU find:
find /path/to/directoryToEmpty -mindepth 1 -delete

# OpenBSD (and probably other BSDs)
find /path/to/directoryToEmpty -mindepth 1 -depth -exec rm -f {} \;

# To see what it deletes, in the order it will delete it:
find /path/to/directoryToEmpty -mindepth 1 -depth -print
    
por 22.01.2016 / 02:27
0
rm var/myfolder/*/*

O arquivo excluirá tudo dentro das subpastas sem tocar nas próprias subpastas.

O primeiro * é para os subdiretórios de myfolder em si ( A , B , ...). O segundo * é para os arquivos em A , B , etc.

SE houver mais pastas dentro de A , B , etc. Primeira execução:   rm /var/myfolder/*/*/* , em seguida, execute rm /var/myfolder/*/* .

    
por 22.01.2016 / 12:49
0

Você também deve ser capaz de acessar o topo da árvore de diretórios em questão e, em seguida, executar:

find . -type f -print0 | xargs -0 rm -rf

e isso deve excluir todos os arquivos enquanto deixa a árvore de diretórios intacta. As opções -print0 e -0 podem ser omitidas se você tiver certeza de que não possui nomes de arquivos ou diretórios que contenham espaços.

O comando find faz distinção entre arquivos (-type f) e links (-type l), portanto, isso deve deixar os links intactos, se houver. Não testado embora. Em caso de dúvida, execute:

find . -type l

e veja se alguma coisa aparece antes de você executar o comando find anterior.

    
por 18.07.2017 / 16:34
-2

Basta usar o comando abaixo:

sudo rm -rf directory_in_which_you_have_content/*

---------------- OU ------------------------------ --------------------------

O '*' é todo para quando você usar * que irá apagar todo o conteúdo. Então, use o comando como este ou vá para o diretório em que você deseja excluir todo o conteúdo e use apenas o comando abaixo:

sudo rm -rf *

    
por 22.01.2016 / 13:49

Tags