Linux Script;Для цикла переименовать;Новое в сценариях - PullRequest
0 голосов
/ 18 октября 2018

Вы должны простить меня, у меня очень мало опыта написания скриптов для Linux.Хорошо. Я пытаюсь переименовать часть файла с указанным именем, но проблема, с которой я сталкиваюсь, заключается в том, что я получаю сообщение об ошибке во время цикла For Loop: 0403-011.не подходит для этой команды Я не уверен, что я делаю неправильно в цикле for, может кто-нибудь помочь?

    #Creates Directory
    echo "Name of New Directory"
    read newdir
    if [[ -n "$newdir" ]]
    then
      mkdir $newdir
    fi
    echo $userInput Directory Created
    echo 
    echo "Directory you wish to Copy?"
    read copydir
    if [[ -n "$copydir" ]]
    then
    #Copies contents of Specified Directory
     cp -R $copydir/!(*.UNC) $newdir;

    #Searches through directory  
    for file in $newdir/$copydir*; do
    mv -v -- "$file" "${file/old/new}";
    done


fi

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Какую версию ksh вы используете?

"${file//old/new}" и "${file/old/new}" являются допустимыми синтаксисами в ksh93 .

Если ваш env является ksh88 "${file//old/new}", замена не поддерживается.

Вы должны использовать sed / tr для замены шаблона.Вот пример с sed.

mv -v -- "$file" "$(echo ${file}|sed 's/old/new/')"

0 голосов
/ 18 октября 2018

Неправильная строка:

mv -v -- "$file" "${file/old/new}";

должна быть:

mv -v -- "$file" "${file//old/new}";

Если вы хотите заменить $old на $new (в отличие от буквенной строки "old"с "new"), напишите:

mv -v -- "$file" "${file//$old/$new}";
...