我的这个目录充满了图像,我可以这样做:
echo *.jpg
image1.jpg image2.jpg image3.jpg # and so on
如何获得这种格式的纯文本文件的输出?
image1.jpg
image2.jpg
image3.jpg
答案1
避免使用ls
bash 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
或平行