bash - 如何列出和排序名称中只有一个数字的图片?
问题描述
如何在 a 中列出所有jpg
带有数字作为名称的bash
内容mac
?我有一个文件夹,里面有几张图片,名称中都有数字。
但是,我只想将这些图片列出并排序,bash
其名称中只有 1 个数字,布局如下:1.jpg
or 30.jpg
,但不是1-1.jpg
or30-1-2.jpg
等。
我试过ls $* | sort -V
了,但它给了我所有的照片。
我怎样才能达到预期的效果?
解决方案
您不需要任何第三方工具,只需启用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 $*
永远不会奏效,因为$*
它是一个特殊的bash
shell 变量,它是通过连接所有传递的命令行参数并由IFS
. 您是否尝试在函数/脚本*
中作为参数和进程传递$*
并在返回的列表中排序?
推荐阅读
- php - Mysql比较json数据和数据库
- operating-system - 为什么在生产者消费者问题中我们需要 2 个信号量变量?
- r - 如何在ggplot2中绘制具有正确间隔的连续x轴值的箱线图
- java - 无法找到元素的 Spring NamespaceHandler
- python - 如何制作计数器的子集?
- pandas - 使用 matplotlib 计算 pandas 列数据库和条形图中的出现次数
- git - 暂时恢复 git 中的功能
- java - IntelliJ IDEA 在哪里保存运行/调试配置?
- javascript - JsPDF,如何获取 javascript 变量
- detox - 排毒 - 如何在不使用期望的情况下检查元素是否存在