将bash变量传递给perl命令

时间:2017-01-30 14:06:47

标签: bash image perl rename subdirectory

我尝试重命名具有以下结构的文件夹:

xxx_name_surname/
├── whatever.jpg
├── foobar.jpg
├ [...]
├── barfoo.jpg
└── full
    ├── whatever.jpg
    ├── foobar.jpg
    ├ [...]
    ├── barfoo.jpg

之类的:

xxx_name_surname/
├── 001_name_surname.jpg
├── 001_name_surname.jpg
├ [...]
├── 011_name_surname.jpg
└── full
    ├── 001_name_surname.jpg
    ├── 002_name_surname.jpg
    ├ [...]
    ├── 011_name_surname.jpg

我使用以下脚本:

#!/bin/sh
for d in *; 
    do
        if [ -d "$d" ]; then
            cd $d;

            folder_name=${PWD##*/}
            image_name=${folder_name:4}
            echo Current dir is:
            echo $current_dir
            echo "Rename and sanitize image in folder ..."
            export $image_name

            rename -f -N ...001 -X -e '$_ = $N . '_' . $_' *.jpg

            echo
            echo "Creating folder" $d"/full ..."
            mkdir full
            echo "Adding padding to image ..."
            mogrify -path full -background white -gravity center -resize 1920x1080\> -extent 1920x1080 *.jpg
            cd ..
            echo
        fi
done

echo "Done."

我制作的剧本试图:

  • 解析文件夹结构
  • 获取父文件夹名称(不含xxx编号)
  • 重命名并清理文件名(重命名为Perl脚本 - >参考http://plasmasturm.org/code/rename/
  • 使用mogrify创建完整版本的图像,并将输出放在完整文件夹中。

我的问题与重命名命令有关:

rename -f -N ...001 -X -e '$_ = $N . '_' . $_' *.jpg

根据manual page,可以使用计数器作为前缀重命名文件。 我理解这是一个与将一个bash参数传递给perl脚本相关的语法问题。我在stackexchange上也找到了相同的答案,但我不能解决自己,因为我不是perl专家。

然后我意识到脚本非常简单,但是我想问一下你是否有建议以获得相同的结果 - 使用bash,命令行 - 但是以更好的方式。

感谢。

1 个答案:

答案 0 :(得分:0)

<强>解

这解决了我的问题:

nil

所以最终的bash脚本是:

    IMAGENAME=$(echo $image_name)
    export IMAGENAME
    rename -f -N ...001 -X -e '$_ = $N . "_" . $ENV{IMAGENAME}' *.jpg

注意

正如您所看到的,脚本不是最佳解决方案,但正在完成工作。