excluir certos arquivos em ls


61

Gostaria de executar ls e excluir certos arquivos na saída.

Quando executo o seguinte comando, recebo todos os arquivos com cada um em uma linha:

$ ls -1
file1
file2
file3
temp

Gostaria de executar este comando de uma maneira que mostre

$ ls -1 <insert magic here> temp
file1
file2
file3

Respostas:


82
ls -I <filename>

-I = Ignore o nome do arquivo, ou seja, não liste o arquivo especificado.

Para ignorar mais de um arquivo, adicione -I antes de cada nome de arquivo.

ls -I file1 -I file2

Para ignorar arquivos por suas extensões de nome, faça o seguinte, por exemplo.

ls -I "*.jpg" -I "*.svg"

4
Se você usar a opção de formato longo --ignore, você pode estender isso para padrões glob por exemplo, ls --ignore="file?"ouls --ignore="file*"
steeldriver

3
você pode usar padrões glob com o pequeno formulário, bem citando os padrões
verboze

18

Para mim, se eu usar -I uma vez, funciona, mas se eu usar duas vezes, não. por exemplo: ls -I *.csvfunciona.

Mas ls -I *.csv -I *.txtnão funciona e retorna arquivos txt.

--ignore fez o truque para mim. Era disso que eu precisava e trabalhei.

ls -lhrt --ignore="*.gz" --ignore="*.1"

Isso me listará os arquivos da pasta de log em que exclui os logs de backup antigos.


3
citar * .csv na primeira forma funciona, por exemplo ls -I '*.txt',. O motivo pelo qual não funciona entre aspas é por causa da expansão do shell, ou seja, você está dizendo ao shell para listar todos os arquivos csv em vez de excluí-los. O que está realmente acontecendo é que ele ignora a primeira .csv e .1 arquivos após a expansão, mas lista os restos
verboze

As aspas duplas funcionaram para mim também. Obrigado @verboze
user38537

isso é mais fácil. Obrigado.
Philippe Delteil 6/03

6

ls --ignore={"*.jpg","*.png","*.svg"}


4
Isso é simplesmente usar a expansão de chaves do bash para obter três --ignoreopções. Você também poderia ter usado--ignore="*."{jpg,png,svg}
Muru

1

Eu acho que isso produz a saída que você está procurando:

ls -1 !(temp)

Aparentemente , você precisa shopt -s extglobque isso funcione
(eu o habilitei, então acho que em algum momento no passado distante achei útil e habilitei).

Eu acho que você também pode usar grep para filtrar a saída:

ls -1 | grep -v '^temp$'

Usar um canal e filtros fornece muito mais flexibilidade e habilidades transferíveis para outros comandos / situações, embora você possa não estar interessado nisso para esse caso específico.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.