删除特殊字符和批量重命名

时间:2010-09-27 02:12:11

标签: linux bash loops shell for-loop

我正在尝试创建一个shell脚本来删除特殊字符,例如{}()!,'等。到目前为止,我已经引用了我在这里提出的过去的问题,但是我收到了一条奇怪的错误消息:

-bash-3.2$ ./test2.sh
./test2.sh: line 7: unexpected EOF while looking for matching `"'
./test2.sh: line 10: syntax error: unexpected end of file

test2.sh

#!/bin/bash
shopt -s nullglob
for file in *
do
        if [ -f "$file" ]; then
        newfile="`echo $file | tr -d '[{}(),\!]' | tr -d "\'" | sed 's/_-_/_/g'`"
        mv "$file" "$newfile"
        fi
done

不知道我在这个问题上出错了,文件的名称如下:

Folder - 01
Folder 02!
Folder(03)
Folder Four_Three

所需的输出是

Folder 01
Folder 02
Folder 03
Folder Four Three

提前谢谢。

3 个答案:

答案 0 :(得分:1)

shopt -s extglob
shopt -s nullglob
for i in *; do echo "mv $i ${i//[[:punct:]]/}"; done

答案 1 :(得分:0)

您在if测试中错过了双引号。

答案 2 :(得分:0)

您正在测试$file是否是文件,但您显然想要重命名目录(除非您有名为“Folder *”的非目录文件)。将您的测试更改为:

if [ -d "$file" ]; then