Удаление специальных символов и массовое переименование - PullRequest
0 голосов
/ 27 сентября 2010

Я пытаюсь создать сценарий оболочки для удаления специальных символов, таких как {} () !, 'и т. Д. До сих пор я ссылался на прошлый вопрос, который задавал здесь, однако получаю странное сообщение об ошибке:

-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 ]

1 голос
/ 27 сентября 2010
shopt -s extglob
shopt -s nullglob
for i in *; do echo "mv $i ${i//[[:punct:]]/}"; done
0 голосов
/ 27 сентября 2010

Вы проверяете, является ли $file файлом, но вы, очевидно, хотите переименовать каталоги (если у вас нет не-каталогов файлов с именем «Папка *»). Измените свой тест на:

if [ -d "$file" ]; then
0 голосов
/ 27 сентября 2010

В тесте if отсутствует двойная кавычка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...