Corresponde a muitos padrões no comando de listagem de arquivos ls? [duplicado]

0

Eu tenho muitos arquivos no meu diretório. Eu gostaria de listar, copiar ou mover arquivos contendo 'abc' e 'xyz' em seus nomes. Como faço esse padrão de correspondência com AND?

O comando normal: ls *abc* *xyz* só funciona com OR.

    
por Trong Nhan Nguyen 08.05.2018 / 05:45

1 resposta

1

Use desta maneira.

ls *abc*xyz* *xyz*abc*

Usando em mv ou cp , basta especificar o diretório de destino com a opção -t , já que você está procurando os arquivos com curingas e pode ser mais do que um arquivo para copiar / mover:

cp -t /path/to/dest *abc*xyz* *xyz*abc*

Ou use find como:

find \( -name '*abc*' -a -name '*xyz*' \)

que é igual a find -name '*abc*' -name '*xyz*' conforme documentado em man find :

expr1 expr2
Two expressions in a row are taken to be joined with an implied "and"; expr2 is not evaluated if expr1 is false.

expr1 -a expr2
Same as expr1 expr2.

expr1 -and expr2
Same as expr1 expr2, but not POSIX compliant.

Você pode adicionar -exec ... ao comando acima para fazer o que quiser nos arquivos encontrados.

find \( -name '*abc*' -a -name '*xyz*' \) -exec do-stuffs {} +
    
por 08.05.2018 / 05:49