gpt4 book ai didi

bash - 从文件名中删除 "!"、 "["和 "]"

转载 作者:行者123 更新时间:2023-11-29 09:46:42 24 4
gpt4 key购买 nike

我正在尝试为我放在一起的模拟器重命名 1700 多个视频,

一些文件可能类似于以下示例:

romfilename1!!! (Japan) [SLUS-01005].mp4
romfilename2 (USA) [SLUS-28605] (Disc 1).mp4
romfilename3 (USA) [SLUS-28605] (Disc 2).mp4

我正在努力实现以下结果:

romfilename1.mp4
romfilename2 (Disc 1).mp4
romfilename3 (Disc 2).mp4

到目前为止,我已经能够使用以下方法删除 (USA) & (Japan):

for i in *.mp4
do
mv "$i" "`echo $i | sed 's/ (USA)//'`"
done

所以现在我陷入了如何删除感叹号的困境,我花了很多时间试图寻找答案,但运气不佳。我也对如何删除这些代码“[SLUS-28605]”感到困惑多半是因为括号“[”和“]”,里面的代码并不重要。我已经尝试了以下内容,但是这些特定的字符把事情搞砸了。

for i in *.mp4
do
mv "$i" "`echo $i | sed 's/!!//'`"
done

和...

for i in *.mp4
do
mv "$i" "`echo $i | sed 's/[SLUS-28605]//'`"
done

和..

for i in *.mp4
do
mv "$i" "`echo $i | sed -i 's/[]"[]//g'
done

在此先感谢您的帮助,Nem

最佳答案

你不需要 sed 来做这一切。

shopt -s extglob
for i in *.mp4
do
# Remove all !; the ! doesn't need to be escaped if history
# expansion is disabled.
new_i=${i//\!}

# Remove the *first* parenthesized group (which contains the country)
new_i=${new_i/ (+([!)]))}

# Remove the bracketed group
new_i=${new_i// \[*]}

#mv "$i" "$new_i"

echo "mv \"$i\" \"$new_i\""

done

一旦确认 mv 命令正确,您就可以删除 echo

关于bash - 从文件名中删除 "!"、 "["和 "]",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36840017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com