【发布时间】:2022-11-07 02:53:47
【问题描述】:
我再次尝试重命名一些视频文件,但我的命令再次出现问题。如果我能得到另一双眼睛来看看这个并弄清楚我没有看到什么,我将不胜感激。
我有这样的文件;
'DARK Matter S01E03 Episode Three.mp4'
'DARK Matter S01E04 Episode Four.mp4'
ETC...
我正在尝试从名称中删除 " Episode Three", " Episode Four" 等,并且我编写了此命令,但它并没有按预期工作。
for file in *Episode*;do echo "rename \"$file\" "\"$file" | sed 's/ Episode*./.')";done
该命令的结果是;
rename "DARK Matter S01E03 Episode Three.mp4" "DARK Matter S01E03 Episode Three.mp4 | sed 's/ Episode*./.')
rename "DARK Matter S01E04 Episode Four.mp4" "DARK Matter S01E04 Episode Four.mp4 | sed 's/ Episode*./.')
rename "DARK Matter S01E05 Episode Five.mp4" "DARK Matter S01E05 Episode Five.mp4 | sed 's/ Episode*./.')
它没有识别到 sed 的管道,并且我的 sed 命令本身没有正确编写(我知道,我对正则表达式很糟糕)。 我会很感激你能给的任何帮助。
【问题讨论】:
-
也许你想要
find . -type f -name '*Episode*' -exec bash -c 'echo mv $0 $(sed "s/ Episode[^.]*//" <<< $0)' "{}" \;? -
find . -type f -name '*Episode*' -exec bash -c 'mv "$0" "$(sed "s/ Episode[^.]*//" <<< $0)"' "{}" \;实际上重命名。 -
好吧,我想这会起作用,但它完全重写了我原来的单行。幸运的是,我找到了自己的解决方案(感谢您!)
-
管道运算符和 sed 命令都在传递给
echo命令的字符串的双引号内。因此,您的代码中根本没有管道。 -
顺便说一句,
echo SOMETHING | somecommand可以更可靠地写成somecommand <<<SOMETHING。请注意,除非您使用echo -nE SOMETHING,否则 echo 不一定会输出作为参数传递的完全相同的字符序列。