【问题标题】:Removing Special Characters and bulk renaming删除特殊字符和批量重命名
【发布时间】:2010-09-27 02:12:10
【问题描述】:

我正在尝试制作一个 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

提前谢谢你。

【问题讨论】:

    标签: linux bash loops shell for-loop


    【解决方案1】:
    shopt -s extglob
    shopt -s nullglob
    for i in *; do echo "mv $i ${i//[[:punct:]]/}"; done
    

    【讨论】:

    • 这是迄今为止最接近的答案,它运行脚本,似乎在运行,但是当我运行 ls -la 时,它没有显示所做的更改。
    【解决方案2】:

    if 测试中缺少双引号。

    【讨论】:

    • 感谢您指出这一点!但是,当我添加它并重新运行它时,它仍然给我意外的 EOF 错误。
    • 在 Cygwin bash 中为我工作。但是,newfile 定义周围的双引号是多余的,并且可能与第二个 tr 的字符串参数周围的双引号冲突。尝试删除外部双引号。
    • 奇怪的是,它可以运行,但它不能修复任何名为 Folder(03)、Folder 02! 等的文件夹
    【解决方案3】:

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

    if [ -d "$file" ]; then
    

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 2017-02-21
      • 1970-01-01
      • 2012-01-31
      • 2013-12-09
      • 1970-01-01
      • 2011-01-25
      • 2015-09-24
      • 1970-01-01
      相关资源
      最近更新 更多