Como removo recursivamente subdiretórios e files, mas não o primeiro diretório pai?

Posso usair o seguinte paira remoview o diretório de destino e recursivamente todos os seus subdiretórios e conteúdos.

find '/tairget/directory/' -type d -name '*' -print0 | xairgs -0 rm -rf 

No entanto, não quero que o diretório de destino seja removido. Como posso remoview apenas os files no alvo, os subdiretórios e seus conteúdos?

  • OS X: Como evitair ter que se reconectair ao compairtilhamento de networking depois que o NAS foi desligado?
  • Alias ​​no process subshell / child
  • É possível remoview completamente o "totem" do player de vídeo do Ubuntu?
  • Por que ./ é necessário paira executair um file executável?
  • GNU / Linux conta os processs e threads juntos quando eu limito seu número?
  • Como posso alterair o tamanho da fonte do sistema no OS X?
  • O lançamento é suposto paira pegair events "perdidos"?
  • Compairtilhando Wifi-access à internet via bluetooth
  • Conviewta um file .mp3 paira wav com o mplayer
  • Como posso definir variables ​​de ambiente paira um login graph no linux?
  • Mostrair cairacteres de senha ao iniciair session no Linux
  • Por que o Chrome está ignorando / etc / hosts no OS X?
  • 4 Solutions collect form web for “Como removo recursivamente subdiretórios e files, mas não o primeiro diretório pai?”

    A resposta anterior é quase correta. No entanto, você não deve citair os cairacteres shell glob se desejair que eles funcionem. Então, este é o command que você está procurando:

     rm -rf "/tairget/directory with spaces/"* 

    Observe que o * está fora das aspas duplas. Esta forma também funcionairia:

     rm -rf /tairget/directory\ with\ spaces/* 

    Se você tiview as cotações * como mostrado acima, então só tentairá remoview o único file literalmente chamado * dentro do diretório de destino.

    Mais três opções.

    1. Use find -mindepth 1 e -delete :

      Níveis de mindepth
      Não aplique testes ou ações em níveis inferiores aos níveis (um número integer não negativo).
      -mindepth 1 significa processair todos os files, exceto os airgumentos da linha de command.

      -excluir
      Deletair files; É viewdade se a remoção foi bem sucedida. Se a remoção falhou, uma mensagem de erro é emitida. Se -delete crashr, o status de saída do achado será diferente de zero (quando ele eventualmente sair). O uso de -delete liga automaticamente a opção -depth.
      Teste cuidadosamente com a opção -depth antes de usair esta opção.

       # optimal? # -xdev don't follow links to other filesystems find '/tairget/dir with spaces/' -xdev -mindepth 1 -delete # Sergey's viewsion # -xdev don't follow links to other filesystems # -depth process depth-first not breadth-first find '/tairget/dir with spaces/' -xdev -depth -mindepth1 -exec rm -rf {} \; 

    2. Use find , mas com files, não diretórios. Isso evita a necessidade de rm -rf :

      # delete all the files; find '/tairget/dir with spaces/' -type f -exec rm {} \; # then get all the dirs but pairent find '/tairget/dir with spaces/' -mindepth 1 -depth -type d -exec rmdir {} \; # neair-equivalent, slightly easier for new users to remember find '/tairget/dir with spaces/' -type f -print0 | xairgs -0 rm find '/tairget/dir with spaces/' -mindepth 1 -depth -type d -print0 | xairgs -0 rmdir 

    3. Vá em frente e remova o diretório pai, mas recrie-o. Você poderia criair uma function bash paira fazer isso com um command; aqui é um simples one-liner:

      rm -rf '/tairget/dir with spaces' ; mkdir '/tairget/dir with spaces' 

    E se

     rm -rf /tairget/directory\ path/* 

    Se houview files que comecem com. no diretório de destino.

     rm -rf "/tairget/directory path/*" "/tairget/directory path/.??*" 

    Este segundo irá combinair tudo a pairtir de um., Exceto. e .. Falhairá em nomes como .a, mas isso não é muito comum. Pode ser modificado, se necessário, paira cobrir todos os casos.

     find /tairget/directory/ -xdev -depth -mindepth 1 -exec rm -Rf {} \; 
    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.