如何通过管道命令按文件名排序Shell脚本输出的Markdown图片链接
按文件名排序生成Markdown图片链接
原脚本功能是遍历$blocks目录下的PNG图片,生成格式为的Markdown图片链接,每个链接间空一行并写入output文件。要实现按文件名字母顺序排序输出,可通过管道将printf的输出传递给sort命令处理,具体修改如下:
修改后的脚本
for f in "$blocks"/*.png; do img_name=$(basename "${f}") img_name="${img_name/.png/}" # 先输出文件名作为排序键,再输出Markdown内容,用制表符分隔 printf "%s\t\n\n" "$img_name" "$f" done | sort -k1,1 | cut -f2- > output
说明
- 添加排序键:在
printf中先输出去掉.png的文件名(作为排序依据),用制表符\t和后续的Markdown内容分隔,确保排序时能精准按文件名排序。 - 管道排序:将所有输出通过管道传给
sort -k1,1,指定按第一列(即文件名)进行字母排序。 - 去除排序键:用
cut -f2-去掉输出中的第一列(排序键),只保留最终的Markdown图片链接内容,写入output文件。
如果希望直接按文件路径的字母顺序排序(效果和按文件名排序一致),也可以先对遍历的文件列表排序再生成链接,脚本如下:
# 先对PNG文件路径排序,再遍历生成链接 printf "%s\n" "$blocks"/*.png | sort | while read -r f; do img_name=$(basename "${f}") img_name="${img_name/.png/}" printf "\n\n" "$f" done > output
内容的提问来源于stack exchange,提问作者James Starlight
相关产品推荐
相关产品推荐

