Estou tentando listar todos os .tar.gz
arquivos, apenas usando o seguinte comando:
ls *.tar.gz -l
... Ele me mostra a seguinte lista:
-rw-rw-r-- 1 osm osm 949 Nov 27 16:17 file1.tar.gz
-rw-rw-r-- 1 osm osm 949 Nov 27 16:17 file2.tar.gz
No entanto, eu só preciso listar desta maneira:
file1.tar.gz
file2.tar.gz
e também não:
file1.tar.gz file2.tar.gz
Como isso é feito "corretamente"?
ls -1 *.tar.gz
, Mas o que você quiser usar a lista para ? Se você está fazendo algo com esses nomes de arquivos,ls
não é o caminho certo para fazê-lo. Veja Por que * not * analisa `ls` (e o que fazer em vez disso)?man ls
. Verifique se a fonte de exibição possui um bom contraste entre 1 (um) e l (letra minúscula ell).Respostas:
A
-1
opção (o dígito "um", não o "L" minúsculo) listará um arquivo por linha sem outras informações:fonte
ls -1 *.tar.gz
funciona tão bem.-
..hiddenfile
,benign.php
,evil.bin
,--hide=*evil*
, sem o que--
você não veráevil.bin
ou--hide=*evil*
.-2
(ou -3 etc.)! ;-)columns
!)Se você precisar apenas dos nomes dos arquivos, poderá usar
printf
:... o shell expandirá o
*.tar.gz
curinga para os nomes dos arquivos eprintf
os imprimirá, cada um seguido por uma nova linha. Essa saída seria um pouco diferente dals
do caso de nomes de arquivos com novas linhas incorporadas:configuração
ls
printf
fonte
ls -b
,ls -Q
, ls--quoting-style=...
.printf '%q\n'
. (Ambos GNU.)ls
se comporta de maneira diferente quando sua saída é canalizada. Por exemplo:Portanto, se você quiser ver todos os seus
*.tar.gz
arquivos, um por linha, faça o seguinte:Mas e se você não quiser canalizar sua saída? Ou seja, existe uma maneira de forçar
ls
a saída dos nomes de arquivos um para uma linha sem canalizar a saída?Sim, com o
-1
interruptor. (Isso é um traço com o número 1.) Portanto, você pode usar estes comandos:fonte
Ou com
GNU find
:Ao contrário de
ls
com*
ele vai procurar.tar.gz
arquivos de forma recursiva:fonte
-printf '%P\n'
que, e não apenas-print
- nesse ponto, qualquer compatível com Posixfind
funcionará.-print
será adicionado./
antes do nome do arquivo.Uma maneira um pouco mais indireta e irregular :
EDIT: aspas adicionadas para lidar com nomes de arquivos estranhos
fonte
touch -- '-e \a.tar.gz'
por uma razão de citar suas variáveis e unix.stackexchange.com/q/65803/117549 por razões para uso printf em vez de echo-e \a.tar.gz
arquivorm -- '-e \a.tar.gz'
deve fazer o truque--
funciona pararm
muitas outras pessoas.rm_etc './-x blah'