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
--ignore
, você pode estender isso para padrões glob por exemplo,ls --ignore="file?"
ouls --ignore="file*"
Para mim, se eu usar -I uma vez, funciona, mas se eu usar duas vezes, não. por exemplo:
ls -I *.csv
funciona.Mas
ls -I *.csv -I *.txt
nã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.
fonte
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 restosls --ignore={"*.jpg","*.png","*.svg"}
fonte
--ignore
opções. Você também poderia ter usado--ignore="*."{jpg,png,svg}
Eu acho que isso produz a saída que você está procurando:
Aparentemente , você precisa
shopt -s extglob
que 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:
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.
fonte