2015-09-23 3 views
0

Я пытаюсь переименовать все файлы в подкаталогах в моей папке. Структура файла выглядит следующим образом:Переименование файлов в подкаталогах с использованием сценария bash в linux

PQR/ 
    aaa.txt 
    bbb.jpg 
    ccc.jif 
XYZ/ 
    aaa.txt 
    bbb.jpg 
    ccc.jif 
LMN/ 
    aaa.txt 
    bbb.jpg 
    ccc.jif 

Что я хочу:

PQR/ 
    PQR_aaa.txt 
    PQR_bbb.jpg 
    PQR_ccc.jif 
XYZ/ 
    XYZ_aaa.txt 
    XYZ_bbb.jpg 
    XYZ_ccc.jif 
LMN/ 
    LMN_aaa.txt 
    LMN_bbb.jpg 
    LMN_ccc.jif 

Я пытаюсь использовать следующий Баш скрипт, но его дает мне все виды ошибок (я относительно новым обстреливать сценарии так что медведь со мной).

#!/bin/bash/ 
for dirname in */ 
do 
cd $dirname 
dirnew=${dirname/\///} #To escape the forward slash 
for file in *.*   #Reading the files in the directory 
do 
    mv "$file" "$dirnew"_"$file" 
done 
cd .. 
done 
+2

Чтобы проверить скрипт для общих проблем, которые вы можете использовать http://www.shellcheck.net/# и http://explainshell.com/ – RedX

+0

Спасибо! сделал это и внес изменения, если это необходимо. Тем не менее, я получаю ошибку «Bad substitution». Не удалось ли здесь избежать косой черты? –

+0

Я повторил переменную «dirnew», и она не показывает мне замену косой черты. –

ответ

1
$dirnew = ${dirname/\///} 

Переменная назначение не может иметь пробелы вокруг знака равенства, а левая сторона не должна иметь $. Кроме того, у вас слишком много сокращений в подстановке.

dirnew=${dirname/\//} 
+0

Спасибо, я все еще получаю сообщение об ошибке В нем написано: 'rename_files.sh: 6: rename_files.sh: Плохая замена' –

+0

Моя неудача. Большое спасибо! –

Смежные вопросы