在bash终端

时间:2016-07-22 17:11:09

标签: regex macos command-line terminal filesystems

Bonehead的问题,已经搜索并尝试使用我发现的但我没有“得到”某些东西。大声笑。我的尝试失败了。

MacOS,目录中的数百张图片。全部采用AA111的命名格式(这是产品代码)。 A = alpha char,1 =数字字符。

因此该产品的主要图像是AA111.jpg。如果有相关图像,则将其命名为:

AA111_a.jpg
AA111_b.jpg
AA111_c.jpg
etc. 

我正在移植到一个新的购物车,它想要的格式为:

AA111_1.jpg
AA111_2.jpg
AA111_3.jpg
etc. 

所以我需要说mv任何名称格式为AA111_a.jpg到AA111_1.jpg的图像。

当天我会在睡梦中这样做,但我忘记了所有关于正则表达的知识。

1 个答案:

答案 0 :(得分:0)

没有直接命令来实现这一点,你们很多人都使用下面的脚本:

cd $dir
mkdir destination
#iterate through each file contains pattern \*_\*.jpg
find . -type f -name '*_*.jpg' -print0 |
    while IFS= read -r -d $'\0' line; do
#split file name into two parts
        prefix=`echo "$line" | sed -n 's/^\(.*\)_\(.*\).jpg$/\1/p'`
        postfix=`echo "$line" | sed -n 's/^\(.*\)_\(.*\).jpg$/\2/p'`
#conver postfix(a,b,c) to ASCII
        postfix=$(expr `printf '%d' "'$postfix"` - 96)
#copy file to destination or use **mv** command
        cp $line "$to/${prefix}_${postfix}.jpg"
done