纯文本文件中所有文件的索引名称

纯文本文件中所有文件的索引名称

我的这个目录充满了图像,我可以这样做:

echo *.jpg
image1.jpg image2.jpg image3.jpg # and so on

如何获得这种格式的纯文本文件的输出?

image1.jpg
image2.jpg
image3.jpg

答え1

避免使用lsbash glob 可以做得更好

printf '%s\n' *.jpg >output_file

答え2

find更喜欢ls.使用 find,您可以指定很多选项,例如目录深度(最小和最大)、访问/修改时间、使用正则表达式等等。查看 find 联机帮助页。

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

要仅获取文件名,您可以使用-printf参数:

-printf 格式

真的;标准输出上的打印格式,解释\' escapes and%' 指令。可以指定字段宽度和精度,因为使用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-' 标志确实有效(它强制字段左对齐)。与 -print 不同,-printf 不在字符串末尾添加换行符。

(查看手册页以获取更多信息)

要仅打印文件名,可以使用 printf 和“%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

如果使用 xargs 并以这种方式传递文件名,那么使用“%f\0”并xargs -0使用空分隔符可能是个好主意。

当你愿意的时候,看看-print0论证并真正仔细地看看xargs或平行

関連情報