Evite usar ls
, bash globs pode fazer melhor
printf '%s\n' *.jpg >output_file
Eu tenho este diretório cheio de imagens, e posso fazer isso:
echo *.jpg
image1.jpg image2.jpg image3.jpg # and so on
Como posso obter a saída em um arquivo de texto simples nesse formato?
image1.jpg
image2.jpg
image3.jpg
Eu prefiro find
over ls
. Com o find você pode especificar muitas opções, como profundidade do diretório (min e max), acesso / tempo modificado, uso de expressões regulares e muito mais. Dê uma olhada no find manpage.
runejuhl@lapaz:~/Pictures$ find . -iname '*.jpg'|head
./2011/03/09/CIMG9447.JPG
./2011/03/09/CIMG9445.JPG
./2011/03/09/CIMG9444.JPG
./2011/03/09/CIMG9442.JPG
./2011/03/09/CIMG9443.JPG
./2011/03/09/CIMG9440.JPG
./2011/03/09/CIMG9441.JPG
./2011/03/09/CIMG9446.JPG
./2011/06/26/CIMG9512.JPG
./2011/06/26/CIMG9585.JPG
runejuhl@lapaz:~/Pictures$ find . -maxdepth 2 -iname '*.jpg' |head
./Webcam/2012-01-10-120822.jpg
./Webcam/2010-11-08-192524.jpg
./Webcam/2012-01-10-170146.jpg
./Webcam/2012-01-10-120928_4.jpg
./Webcam/2012-01-10-120835_4.jpg
./Webcam/2012-01-10-120928_3.jpg
./Webcam/2012-01-10-120828.jpg
./Webcam/2012-01-10-120928_2.jpg
./Webcam/2012-01-10-120945_1.jpg
./Webcam/2012-01-10-120945_2.jpg
Para obter apenas o nome do arquivo, você pode usar o argumento -printf
:
-printf format
True; print format on the standard output, interpreting
\' escapes and
%' directives. Field widths and precisions can be specified as with theprintf' C function. Please note that many of the fields are printed as %s rather than %d, and this may mean that flags don't work as you might expect. This also means that the
-' flag does work (it forces fields to be left-aligned). Unlike -print, -printf does not add a newline at the end of the string.
(veja a man page para mais informações)
Para imprimir apenas o nome do arquivo, você usaria printf com "% f":
runejuhl@lapaz:~/Pictures$ find . -maxdepth 2 -iname '*.jpg' -printf '%f\n' |head
2012-01-10-120822.jpg
2010-11-08-192524.jpg
2012-01-10-170146.jpg
2012-01-10-120928_4.jpg
2012-01-10-120835_4.jpg
2012-01-10-120928_3.jpg
2012-01-10-120828.jpg
2012-01-10-120928_2.jpg
2012-01-10-120945_1.jpg
2012-01-10-120945_2.jpg
Se estiver usando xargs e passando o nome do arquivo dessa maneira, pode ser uma boa ideia usar "% f \ 0" e xargs -0
para usar delimitadores nulos.
Quando quiser, dê uma olhada no argumento -print0
e uma boa olhada em xargs
ou paralelo
Tags command-line bash files