A opção -1
(o dígito "one", e não minúscula "L") listará um arquivo por linha sem nenhuma outra informação:
ls -1 -- *.tar.gz
Estou tentando listar todos os arquivos .tar.gz
, usando apenas o seguinte comando:
ls *.tar.gz -l
... Mostra-me 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, só preciso listar dessa maneira:
file1.tar.gz
file2.tar.gz
e também não:
file1.tar.gz file2.tar.gz
Como isso é feito "corretamente"?
Se você precisa apenas dos nomes dos arquivos, você pode usar printf
:
printf '%s\n' *.tar.gz
... o shell expandirá o caractere curinga *.tar.gz
para os nomes dos arquivos e, em seguida, printf
os imprimirá, cada um seguido por uma nova linha. Essa saída pode diferir um pouco de a de ls
no caso de nomes de arquivos com novas linhas incorporadas neles:
$ touch file{1,2}.tar.gz
$ touch file$'\n'3.tar.gz
$ ls -1 -- *.tar.gz
file1.tar.gz
file2.tar.gz
file?3.tar.gz
$ printf '%s\n' *.tar.gz
file1.tar.gz
file2.tar.gz
file
3.tar.gz
ls
se comporta de maneira diferente quando sua saída é canalizada. Por exemplo:
ls # outputs filenames in columns
ls | cat # passes one filename per line to the cat command
Então, se você quiser ver todos os seus arquivos *.tar.gz
, um por linha, você pode fazer isso:
ls *.tar.gz | cat
Mas e se você não quiser canalizar sua saída? Ou seja, existe uma maneira de forçar o ls
a gerar os nomes de arquivo de um para uma linha sem canalizar a saída?
Sim, com a opção -1
. (Isso é um traço com o número 1.) Então você pode usar estes comandos:
ls -1 # shows all (non-hidden) files, one per line
ls -1 *.tar.gz # shows only *.tar.gz files, one per line
Ou com GNU find
:
find -name "*.tar.gz" -printf '%P\n'
Ao contrário de ls
com *
, ele procurará por .tar.gz
arquivos recursivamente:
$ find -name "*.tar.gz" -printf '%P\n'
file1.tar.gz
dir/file3.tar.gz
file2.tar.gz
Um caminho um pouco mais indireto e loopy :
for i in *.tar.gz; do
echo "$i"
done
EDIT: citações adicionadas para lidar com nomes de arquivos estranhos
Tags ls