2017-02-23 94 views
0

У меня есть массив с именем VERSION, что я беру из Mydir каталога и имеет параметры (файлы), как показано ниже:Переименование файлов в одном каталоге -оболочкой Script

VERSION[0]="TEST01_0.TEST01_1" 
VERSION[1]="TEST03_1" 
VERSION[2]="TEST02_1.TEST02_2" 
VERSION[3]="TEST04_2" 
VERSION[4]="TEST02_3" 

И я пытался переименовать TEST01_0.TEST01_1 в TEST01_1 и TEST02_1.TEST02_2 как TEST02_2.But я получаю ошибку, как показано ниже:

mv: cannot stat `TEST01_0.TEST01_1': No such file or directory 
mv: cannot stat `TEST02_1.TEST02_2': No such file or directory 

Можете ли вы помочь мне исправить это? Вот мой код блока:

#!/bin/sh 
VERSION=(/mydir/TEST*) 
for file in "${VERSION[@]}" 
do 
    if [[ `echo ${file} | grep -o '_' | wc -l` == 2 ]]; then 
    mv "${file}" "${file%.*}"; 
    fi 
done 

Благодаря

+0

'#!/Бен/sh'? Как вы запускаете файл? – muru

+0

Я сохраняю его как test.sh и копирую его в лабораторию, затем запускаю 'bash test.sh' –

+0

@OscarSayin: Можете ли вы запустить скрипт после перехода на' mydir'? – Inian

ответ

1

Лучший способ для этого будет работать внутри mydir с bash, как показано ниже, и не полагаться на любых утилит сторонних производителей, как cut или grep

#!/bin/bash 

for file in T* 
do 
    # Getting the string only containing '_' and if the count matches, 2 
    # doing the file rename 

    dashes="${file//[^\_]/}" 
    if (("${#dashes}" == 2)) 
    then 
     mv -v "$file" "${file%.*}" 
    fi 
done 
+1

. Большое спасибо. –

+0

@OscarSayin: С удовольствием помогу! – Inian

+0

Могу я задать вам еще вопрос? Как переименовать файл с Upgrade.TEST01_0.TEST01_1.sql в Upgrade.TEST01_1.sql. Я хочу удалить TEST01_0 из имени файла. Я пробовал как mv -v "$ {file}" "$ {file ## upgradeDb. *.}", Но это не сработало. –