Измените имена файлов при перемещении в другую папку с помощью сценария оболочки Unix - PullRequest
0 голосов
/ 03 ноября 2019

Моя проблема связана с заменой имени файла при перемещении в целевую папку.

echo "src_filename_final_array:::${src_filename_final_array[@]}"

отображает следующее

SRC1_VEX_V4_20190915.txt SRC1_VEX_V4_20190915.ctl

Массив src_filename_final_array содержит два вышеуказанных файла.

иметь mv записанную команду

mv "${src_filename_final_array[@]}" $src_file_InProcess_folder

возможно ли в одной команде mv изменить имена файлов SRC1_VEX_V4_20190915.txt SRC1_VEX_V4_20190915.ctl на SRC1_VEX_20190915.txt SRC1_VEX_20190915.ctl

удаление номера версии, которое можетбыть V4 / v12 / или любой начальный V

Кто-нибудь может предложить лучший способ сделать то же самое?

Заранее спасибо.

С уважением, Prasad S Billahalli

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

В качестве альтернативы, рассмотрите возможность использования 'rename' (из пакета perl contrib), который имеет сильные возможности RE, опираясь на движок Perl.

rename 's/V[0-9]_//g' SRC1_VEX_V4_20190915.txt SRC1_VEX_V4_20190915.ctl

Пожалуйста, убедитесь, что у вас естьправильный rename код. Он входит в пакет rename и иногда распространяется как file-rename

0 голосов
/ 04 ноября 2019

Вы можете написать простой скрипт для циклического перемещения по массиву и изменения каждого имени файла, как показано ниже

src_filename_final_array=(SRC1_VEX_V4_20190915.txt SRC1_VEX_V4_20190915.ctl)

for i in "${arr[@]}"
do
   new_file=`echo "$i" | sed 's/V[0-9]_//g'`
   mv "$i" "$new_file"

done

Ниже приведен рабочий пример

[cloudera@quickstart sub1]$ ls -lrt
total 8
drwxrwxr-x 2 cloudera cloudera 4096 Oct 31 00:17 sub2
-rw-rw-r-- 1 cloudera cloudera  177 Oct 31 23:41 table_list.txt
-rw-rw-r-- 1 cloudera cloudera    0 Nov  3 23:30 SRC1_VEX_V4_20190915.txt
-rw-rw-r-- 1 cloudera cloudera    0 Nov  3 23:31 SRC1_VEX_V4_20190915.ctl

После:

[cloudera@quickstart sub1]$ for i in "${arr[@]}"
> do
>    new_file=`echo "$i" | sed 's/V[0-9]_//g'`
>    mv "$i" "$new_file"
> 
> done
[cloudera@quickstart sub1]$ ls -lrt
total 8
drwxrwxr-x 2 cloudera cloudera 4096 Oct 31 00:17 sub2
-rw-rw-r-- 1 cloudera cloudera  177 Oct 31 23:41 table_list.txt
-rw-rw-r-- 1 cloudera cloudera    0 Nov  3 23:30 SRC1_VEX_20190915.txt
-rw-rw-r-- 1 cloudera cloudera    0 Nov  3 23:31 SRC1_VEX_20190915.ctl
...