Indexar nomes de todos os arquivos em um arquivo de texto simples

2

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
    
por Oxwivi 26.01.2012 / 07:10

2 respostas

5

Evite usar ls , bash globs pode fazer melhor

printf '%s\n' *.jpg >output_file
    
por 26.01.2012 / 07:37
0

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 the printf' 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     

por 26.01.2012 / 22:11