这是我的脚本:
#!/bin/bash
set -x
arguments="some explanation"
if [[ $1 == -f ]]; then
exiftool '-FileName<DateTimeOriginal' -d "%Y-%m-%d %H,%M,%S.%%e" "$2"
elif [[ $1 == -d ]]; then
exiftool -d %Y-%m "-directory<datetimeoriginal" "$2"
elif [[ $1 == -fd ]]; then
exiftool '-FileName<DateTimeOriginal' -d "%Y-%m-%d %H,%M,%S.%%e" "$2"
exiftool -d %Y-%m "-directory<datetimeoriginal" "$2"
elif [[ $1 == -p ]]; then
exiftool '-FileName<DateTimeOriginal' -d "%Y-%m-%d.%%e" "$2"
else
echo -e $arguments
fi
set +x
如果我运行exifrename -f .
,它将重命名当前文件夹中的所有文件。但是,假设我有以下3个文件:
IMAG01234.jpg
IMAG01235.jpg
拉尔夫在家.jpg
并与他们一起运行`exifrename -f IMAG *。它只会重命名一个 IMAG文件。
调试该脚本时,会看到以下内容:
+ [[ -d == -f ]]
+ [[ -d == -d ]]
+ exiftool -d %Y-%m '-directory<datetimeoriginal' IMAG01235.jpg
如何使最后一行显示IMAG *而不是IMAG01235?
答案 0 :(得分:1)
在执行IMAG *时,bash shell会进行定位并将IMAG *扩展为2个文件,并将它们作为参数传递给脚本。您需要遍历所有命令行参数:
示例:
sed
在您的情况下,您可以执行以下假设,即始终只有一个选项,然后是文件列表。
s
注意:如果您对bash脚本感到满意,那么使用case / esac而不是if / else会更容易阅读。