Como faço para excluir uma pasta ao executar operações de arquivo, por exemplo, cp, mv, rm e chown etc. no Linux

6

Como você exclui uma pasta ao executar operações de arquivo, por exemplo, cp, etc.

Eu atualmente usaria o curinga * para aplicar a operação de arquivo a todos, mas preciso excluir uma única pasta.

O comando que estou realmente querendo usar é chown para alterar o proprietário de todos os arquivos em um diretório, mas preciso excluir um subdiretório.

    
por Camsoft 14.01.2010 / 17:08

3 respostas

7

Inverse Globbing:
Você quer um jogo inverso de um glob, eu faria assim:

Você pode fazer uma correspondência inversa com uma nova bash se você habilitar a globalização estendida. Por exemplo, para corresponder a tudo o que não tem foo ou bar no nome:

shopt -s extglob
echo !(*foo*|*bar*)

Ou apenas tudo o que não tem foo:

shopt -s extglob
echo !(*foo*)

Encontrar:
Você também pode usar o find (esta é a opção mais robusta que eu acho), e use! para negar uma correspondência e, em seguida, execute o comando com xargs -0 :

find . ! -iname 'foo' -print0 | xargs -0 echo

Simples:
Apenas mv a pasta em outro lugar, faça o que você precisa fazer, e coloque de volta: -)

    
por 14.01.2010 / 17:14
1

rsync -arv --exclude = {arquivos} {destino}

    
por 08.04.2011 / 09:38
-1

a solução de localização gera um processo chown por arquivo, às vezes isso pode ser um problema. Esta solução gera apenas um processo de perl:

find . | perl -nle "chown($(id -u user), $(id -g group), \$_) unless m/foo/"
    
por 16.12.2014 / 04:25