Linux: Por que ls -R * .zip não encontra arquivos zip em uma árvore?

1

Eu uso o DOS há 22 anos, mas sou novo no Linux. Então, no Linux, quando eu executo

ls -R *.zip

Por que recebo:

ls: *.zip: No such file or directory

Quando estou no topo de uma enorme pasta e árvore de arquivos? Alternativamente, como eu faço

Dir /s *.zip

No Linux?

    
por Luke Puplett 27.11.2012 / 13:31

2 respostas

3

Experimente ls -R|grep .zip ou para caminhos completos:

find .  -name '*.zip'

Isso encontrará todos os arquivos terminados em .zip no diretório atual e em quaisquer subdiretórios.

Parece um pouco mais longo, mas é muito mais poderoso do que a maneira dir /s *.zip do Windows.

    
por 27.11.2012 / 13:36
3

Para expandir um pouco mais na resposta acima, no Linux, os curingas são expandidos pelo shell, o que significa que o shell chamará o comando com uma lista de nomes de arquivos correspondentes como argumentos. E o shell procura apenas no diretório atual arquivos correspondentes (ou em qualquer diretório que você especificar antes do caractere curinga). Por exemplo, um comando como:

ls *.zip

será traduzido em:

ls file1.zip file2.zip file3.zip

E, se não houver arquivos .zip no diretório atual, o nome do arquivo literal *.zip será passado para o comando, caso em que não é possível definir um arquivo chamado *.zip . (Um * é um caractere legal em um nome de arquivo Unix / Linux, btw). Agora, se você não quiser que o shell expanda os caracteres curinga, mas, em vez disso, se quiser que o caractere curinga seja passado diretamente para o comando que você está chamando, será necessário incluí-lo entre aspas. Isto tem um efeito interessante, em que um comando como:

find . -name *.zip

fornecerá os resultados esperados se você não tiver arquivos .zip em seu diretório atual (o comando find verá *.zip ). Mas se você tiver um ou mais arquivos .zip no diretório atual, o que é executado é:

find . -name file1.zip file2.zip

que não encontrará nenhuma correspondência em nenhum subdiretório (a menos que eles sejam denominados exatamente file1.zip ou file2.zip , etc). Assim, a moral da história é, ao usar o find, certifique-se de usar aspas em torno de qualquer nome de arquivo com curingas.

    
por 28.11.2012 / 05:55

Tags