删除“!”从“[”和“]”文件名
问题描述:
我试图重新命名为模拟器超过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)&(日本)通过使用:
for i in *.mp4
do
mv "$i" "`echo $i | sed 's/ (USA)//'`"
done
所以现在我被困在如何去除惊叹号, 我花了很多时间试图寻找答案,但havnt有很多运气。 我也被困在我如何去除这些代码thingys“[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
感谢,焾
答
您可以使用一行替代多个模式sed,并且应该像空格和方括号一样摆脱特殊的字符:
#!/bin/bash
for i in *.mp4
do
mv "$i" "$(echo $i | sed 's/!!!//; s/\ (USA)\ //; s/\ (Japan)\ //; s/\[SLUS-[^][]*\]//')"
done
答
可以使用rename
命令为。它支持正则表达式。因此,该命令将类似于:
rename 's/[![]]//g' *
或
rename 's/[!]*\|\[[^]]*\]\| *(Japan) *\| *(USA) *//g' *
虽然在你的系统中可用rename
请仔细检查手册页。例如。基于deb和基于rpm的分发版使用不同的版本,正则表达式将根据您的本地重命名版本而有所不同。
正则表达式应根据您的完整需求进行调整,因为从问题上看不太清楚。
它也可以节省文件名中的特殊符号可能存在的问题,如\n
等。
答
删除! :
for i in *.mp4
do
name=`echo $i | sed 's/!//g'`
mv "$i" "$name"
done
Eemove的[???]:
for i in *.mp4
do
name=`echo $i | sed 's/\[[^][]*\]//g'`
mv "$i" "$name"
done
拆下(???):
for i in *.mp4
do
name=`echo $i | sed 's/([^)(]*)//g'`
mv "$i" "$name"
done
如果你想删除所有在一次:
for i in *.mp4
do
name=`echo $i | sed 's/!//g' | sed 's/([^)(]*)//g' | sed 's/\[[^][]*\]//g' `
mv "$i" "$name"
done
答
你不需要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
。
试试这个:'sed's/[!] * \ | \ [[^]] * \] \ | *(日本)* \ | *(美国)* // g'' – sat
@sat:请将其添加为答案。 – blackSmith
我试过使用该命令,但它似乎挂起,什么都不做:( – NeMesiS