【发布时间】:2017-06-15 17:26:15
【问题描述】:
我正在尝试使用以下结构重命名文件夹:
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,命令行 - 但以更好的方式。
谢谢。
【问题讨论】:
-
这是 bash,而不是 Perl。您指的是哪种 Perl 脚本?此外,您的示例树输出显示文件名两次。
-
我指的是重命名命令,它是用 Perl 写的 plasmasturm.org/code/rename
-
我认为
-N ...001没什么特别的。这不是什么魔法,它只是一根绳子。在rename程序中,它解析该字符串。我认为您不需要第二个零,只需执行-N ...01就足以使数字与需要和零填充一样宽。您是否使用-n运行您的程序以进行试运行,看看会发生什么? -
哦。好的。看起来
-e等同于perl -e,它以perl 代码的形式运行东西,比如eval。你混淆了引号。-e '$_ = "$N" . "_" . $_'应该这样做。或者-e '$_ = "${N}_$_"',如果你想让它不那么可读。 -
我有一个解决方案:` IMAGENAME=$(echo $image_name) export IMAGENAME rename -f -N ...001 -X -e '$_ = $N 。 “_”。 $ENV{IMAGENAME}' *.jpg`
标签: bash image perl rename subdirectory