我正在寻找一种通过删除两点之间的文本来重命名一批视频的方法。具体来说,我想将第6个字符之后的所有内容删除到最后一个“ LabelMe--”。
0001--LabelMe--A005_01241110_C001--LabelMe-- --Interview--Man in library.mov
0002--LabelMe--A005_01241110_C002--LabelMe-- --Broll--Man looking at books.mov
0003--LabelMe--A005_01241111_C003--LabelMe-- --Broll--messed up--LabelMe-- --Broll--Sitting at table.mov
我正在尝试使用Apple的Automator Services进行此操作。右键单击一堆文件,然后选择服务以清理名称。我找到了一段代码,但不确定我是否正确使用了它。
for f in "$@"
do
echo sed -e 's/\(--LabelMe).*\(LabelMe--)/\1\2/'
done
这个网站上有很多关于使用这样的shell循环重命名文件的问题,还有一些关于为此使用的问题sed
。(例如this,this)
您将需要sed
使用管道将文件名传递给,并使用命令替换来捕获结果,因此如下所示:
mv "$f" "$(echo "$f" | sed -e '...' )"
sed
您使用的命令需要一些修正:对于一个命令,您引用了左括号,但没有引用右括号,因此无法进行分组。另外,我不确定您为什么要将代码LabelMe
段放回文件名。如果要删除它们,只需跳过分组和\N
引用:
's/--LabelMe.*LabelMe--//'
因此,完整的:
for f in "$@"
do
mv "$f" "$(echo "$f" | sed -e 's/--LabelMe.*LabelMe--//' )"
done
另一种方法是使用外壳程序的参数替换执行相同的操作。替换${par/pattern/replacement}
是非标准的,但在许多shell中都支持:
for f in "$@"
do
mv "$f" "${f/--LabelMe*LabelMe--/}"
done
(请注意,这不是正则表达式,因此“任何内容”的语法都是*
,而不是.*
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句