Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 删除特殊字符和批量重命名_Linux_Bash_Loops_Shell_For Loop - Fatal编程技术网

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

Linux 删除特殊字符和批量重命名,linux,bash,loops,shell,for-loop,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 不确定我在这一点上哪里出错,这些文件的名称

我正在尝试制作一个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 不确定我在这一点上哪里出错,这些文件的名称如下:

Folder - 01
Folder 02!
Folder(03)
Folder Four_Three
期望的输出是

Folder 01
Folder 02
Folder 03
Folder Four Three

提前感谢。

如果
测试,则在
中缺少双引号。

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

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

谢谢你指出这一点!然而,当我添加它并重新运行它时,它仍然给我带来意外的EOF错误。在Cygwin bash中为我工作。但是,围绕
newfile
定义的双引号是多余的,可能与第二个
tr
的字符串参数的双引号冲突。尝试删除外部双引号。奇怪的是,它会运行,但不会修复任何名为Folder(03)、Folder 02!,这是迄今为止最接近的答案,它运行脚本,看起来运行,但当我运行ls-la时,它不会显示所做的更改。
if [ -d "$file" ]; then