重命名文件以删除“;”来自 bash 中包含它的所有文件名

重命名文件以删除“;”来自 bash 中包含它的所有文件名

我知道如何替换文件名中的一组字符。例如

for i in *example_text* ;
do
    mv "$i" "`echo $i | sed 's/example_text//'`"
done

如果文件名的一部分是“;”,我该怎么做? (引号之间)。每当我尝试运行时都会出现错误:

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

有小费吗?

答案1

mv虽然可以在循环中使用,但我建议改用 perl rename(它可能安装为perl-renameprename,具体取决于您的操作系统)。它是一个专门为您的目的而设计的工具,并且很可能已经安装在您的系统上。

rename 's/;//g' ./*就可以了,
您可以先回顾一下空运行要做什么:rename -v -n 's/;//g' ./*

答案2

转义分号,它是 shell 的特殊字符。

for i in *\;*
# or
for i in *';'*

如果您使用bash,参数扩展比 shell 快得多sed

for f in *';'* ; do
    mv -- "$f" "${f//;/}"
done

请注意,如果文件已存在,它可以覆盖该文件。使用mv -n或检查是否存在test -e

相关内容