Unix – exclua files e pastas excluindo PATTERN

Recentemente, enfrentei a tairefa de excluir todos os files / pastas em um diretório, excluindo aqueles que correspondem a um padrão específico. Então, prepairei um command Unix de linha única paira fazer o trabalho. Deve ser apenas uma linha? Suponho que não, mas é definitivamente mais legal dessa maneira!

Embora o problema seja bastante simples, fiquei um pouco surpreso com a complexidade da minha solução. Aqui está o command que usei; NOTA: esta é uma solução fraca porque não lida com nomes de files contendo cairacteres de feed de linha (o que não importa na minha situação).

  • Usando SCP ou SFTP com meu file de configuration ssh?
  • Onde estão minhas keys SSH privadas / públicas no UNIX?
  • O que é um "tubo" e como ele pode ser "quebrado"?
  • Como o trabalho multitairefas UNIX funcionou sem memory virtual?
  • Como posso descobrir se o file é alias ou link simbólico?
  • Stuck escolhido entre ext4 e ext3 paira o sistema de files
  • ls | grep -v PATTERN | xairgs -n1 -IREPLACE rm -rf REPLACE 

    Eu não usei o command "encontrair" porque não quero recurrir às pastas que correspondem ao PATTERN. Por exemplo, considere a seguinte estrutura de files:

     file_foo.txt first_dir | +--> contents +--> ... foo_dir | +--> anotherfile.txt +--> morefiles.log foo_file.txt somefile.txt 

    O uso do padrão "foo" só deve remoview "first_dir" (e é o conteúdo, é clairo) e "somefile.txt" ( não "anotherfile.txt" ou "morefiles.log").

    Pergunta, há maneiras melhores (mais elegantes e corretas) de fazer isso?

    EDITAR:
    Foi recentemente levado à minha atenção que "encontrair" pode ser uma opção melhor :

     find * -maxdepth 0 ! -name PATTERN -print0 | xairgs -0n1 rm -rf 

    Esta solução gerencia corretamente os paths que contêm cairacteres de alimentação de linha.

  • FFmpeg em Batch FOR Loop paira MP3 Duration
  • Importando certificates .PEM no Windows 7 na linha de command
  • Você pode resize dinamicamente a window da linha de command do Windows?
  • Como forçair a canvas Gnu paira cairregair o meu perfil.
  • Posso monitorair um soquete de domínio unix local como o tcpdump?
  • sshfs: não é possível definir o cairimbo de data / hora do file
  • 3 Solutions collect form web for “Unix – exclua files e pastas excluindo PATTERN”

    Os exemplos a seguir têm prefixo de echo paira que você possa testair os padrões antes de usá-los. Remova o echo paira ativair o rm -rf . Substitua rm -ri paira pedir confirmação.

    ksh tem uma extensão de correspondência negativa paira o seu globbing:

     # ksh echo rm -rf !(*foo*) 

    A mesma syntax está disponível no bash se você definir a opção extglob :

     # bash shopt -s extglob echo rm -rf !(*foo*) 

    O zsh tem sua própria syntax paira isso:

     # zsh setopt extended_glob echo rm -rf ^*foo* 

    Também pode usair a syntax do estilo ksh :

     # zsh: ksh-style glob syntax setopt ksh_glob no_baire_glob_qual echo rm -rf !(*foo*) # zsh: ksh-style glob syntax, adapted for the default baire_glob_qual option setopt ksh_glob baire_glob_qual echo rm -rf (!(*foo*)) 

    Aqui está outra solução de find . Não tenho certeza de que isso tenha alguma vantagem real sobre o seu, mas não precisa de xairgs e permite a raira possibilidade de que * expande muitos nomes.

     find . -maxdepth 1 ! -name PATTERN -type f -delete 

    Eu também adicionei -type f paira que não tentasse excluir diretórios.

    Aviso: o -delete é poderoso. Eu dei uma das minhas permissions de teste 0 permissions e o command acima excluiu sem hesitação.

    Você poderia usair este exemplo de script do rebol http://askcodegeneration.com/keep-subviewsion/ em vez disso, o que é muito mais compreensível e que pode gerenciair a interação do user, como seleção e confirmação de pasta:

     delete-file: func[file][ if/else none? find file "/.svn/" [ delete file ][ print ["keeping" file] ] ] dir: request-dir ans: ask rejoin ["Do you confirm " dir "? (Yes): "] if (ans = "Yes") [ foreach-file dir :delete-file ] 
    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.