Shell: 在变量列表上使用 for
Shell: use of for on a variable list
不幸的是,我的 shell 技能很差,我需要一些帮助 运行 在我的 QNAP 上安装一个简单的脚本来修复某些视频的日期问题。
我写的脚本很简单:
- 在给定的文件夹中
- 检查是否有以VID_开头的.mp4文件
- 如果是这样,对于每个 运行 给定的 exiftool 命令
这是到目前为止的脚本,但我想我没有使用正确的方式调用变量:
#!/bin/sh
# set target directories
dir="/share/Multimedia/Pictures/"
# move to target directory
cd "$dir"
# check if there is some .mp4 file starting with "VID_" in the folder
VID=$(ls -A $dir | grep 'VID_' | grep './mp4')
if
["$VID"];
then
# for each file in the list
for f in $VID
do
# change all date metadata according to its filename
exiftool "-*date<filename" -wm w $f
done
else
fi
感谢您的帮助!
ps: exiftool 指令是正确的(可能除了变量)
您的代码可能由于使用而失败:
grep './mp4'
因为mp4
之前没有/
。
最好将脚本设置为:
#!/bin/sh
# set target directories
dir="/share/Multimedia/Pictures/"
# move to target directory
cd "$dir"
for f in VID_*.mp4; do
exiftool "-*date<filename" -wm w "$f"
done
这里不需要解析 ls
的输出,也不需要使用 grep
,因为 glob VID_*.mp4
会找到正确的文件。
不需要为此编写脚本,这样做只会减慢您的速度,因为您必须为每个文件调用 ExifTool。 ExifTool 可以一次完成所有文件:
ExifTool -ext mp4 '-*date<filename' -wm w /path/to/dir/VID_*
-ext mp4
选项将命令限制为仅 mp4 文件。由于您似乎在 linux/mac 系统上,因此必须将双引号更改为单引号。 Windows 系统需要双引号,linux/mac 系统需要单引号。
不幸的是,我的 shell 技能很差,我需要一些帮助 运行 在我的 QNAP 上安装一个简单的脚本来修复某些视频的日期问题。
我写的脚本很简单:
- 在给定的文件夹中
- 检查是否有以VID_开头的.mp4文件
- 如果是这样,对于每个 运行 给定的 exiftool 命令
这是到目前为止的脚本,但我想我没有使用正确的方式调用变量:
#!/bin/sh
# set target directories
dir="/share/Multimedia/Pictures/"
# move to target directory
cd "$dir"
# check if there is some .mp4 file starting with "VID_" in the folder
VID=$(ls -A $dir | grep 'VID_' | grep './mp4')
if
["$VID"];
then
# for each file in the list
for f in $VID
do
# change all date metadata according to its filename
exiftool "-*date<filename" -wm w $f
done
else
fi
感谢您的帮助!
ps: exiftool 指令是正确的(可能除了变量)
您的代码可能由于使用而失败:
grep './mp4'
因为mp4
之前没有/
。
最好将脚本设置为:
#!/bin/sh
# set target directories
dir="/share/Multimedia/Pictures/"
# move to target directory
cd "$dir"
for f in VID_*.mp4; do
exiftool "-*date<filename" -wm w "$f"
done
这里不需要解析 ls
的输出,也不需要使用 grep
,因为 glob VID_*.mp4
会找到正确的文件。
不需要为此编写脚本,这样做只会减慢您的速度,因为您必须为每个文件调用 ExifTool。 ExifTool 可以一次完成所有文件:
ExifTool -ext mp4 '-*date<filename' -wm w /path/to/dir/VID_*
-ext mp4
选项将命令限制为仅 mp4 文件。由于您似乎在 linux/mac 系统上,因此必须将双引号更改为单引号。 Windows 系统需要双引号,linux/mac 系统需要单引号。