首页 > 解决方案 > 如何列出和排序名称中只有一个数字的图片?

问题描述

如何在 a 中列出所有jpg带有数字作为名称的bash内容mac?我有一个文件夹,里面有几张图片,名称中都有数字。

但是,我只想将这些图片列出并排序,bash其名称中只有 1 个数字,布局如下:1.jpgor 30.jpg,但不是1-1.jpgor30-1-2.jpg等​​。

我试过ls $* | sort -V了,但它给了我所有的照片。

我怎样才能达到预期的效果?

标签: bashmacossortingcommand-line-interfacels

解决方案


您不需要任何第三方工具,只需启用bash扩展通配符(如果默认未启用)。该nullglob选项允许不匹配文件的文件名模式扩展为空字符串,而不是它们本身

shopt -s extglob nullglob

如果您确定,不能有包含其他字母数字字符的文件名,那么要排除包含 的文件名-,您需要做的就是

printf '%s\n' !(*-*).jpg

或特定于仅匹配带有数字的文件名

printf '%s\n' [[:digit:]]!(*-*).jpg

或者将其包装在一个子 shell 中,以避免在交互式 shell 中设置全局选项。

( shopt -s extglob nullglob ; printf '%s\n' [[:digit:]]!(*-*).jpg ; ) |
sort -V

至于为什么你的尝试没有奏效,ls $*永远不会奏效,因为$*它是一个特殊的bashshell 变量,它是通过连接所有传递的命令行参数并由IFS. 您是否尝试在函数/脚本*中作为参数和进程传递$*并在返回的列表中排序?


推荐阅读