我知道如何替换文件名中的一组字符。例如
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-rename
或prename
,具体取决于您的操作系统)。它是一个专门为您的目的而设计的工具,并且很可能已经安装在您的系统上。
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
。