2015-12-09 3 views
0

У меня есть 66 файлов в моей папке, и я хочу переименовать их все, используя части своих имен.Переименовать несколько файлов - Сценарий оболочки

Например, Мой файл: Subscriber_ID_List_2015_11_14.csv Я хочу это так -> TheFile_20151114.csv

Я попытался код ниже, но это не сработало. Как я могу это сделать?

Спасибо

#!/bin/bash 
FILES=/my/path/ 
for f in $FILES 
do 

cd /my/path/ 

b=`ls "$f" |awk -F" " '{print $5}' |cut -c6-9` 
c=`ls "$f" |awk -F" " '{print $5}' |cut -c11-12` 
d=`ls "$f" |awk -F" " '{print $5}' |cut -c14-15` 

cp "$f" TheFile_${b}${c}${d}.csv 

done 

ответ

0

Может у попробовать это.

#!/bin/bash 
for files in `ls Subscriber_ID_List_*.csv` 
do 
cd /my/path/ 
datePrefix=`echo $files | awk -F '.' '{ print $1}'| awk -F '_' '{ print $4$5$6}'` 
cp "$files" "TheFile_${datePrefix}.csv" 
done 
0
FILES=/my/path/ 

Это ставит только путь в переменную, а не на имена файлов. Если вы хотите обработать все файлы в /my/path/, вы можете использовать FILES=/my/path/*.

b=`ls "$f" |awk -F" " '{print $5}' |cut -c6-9` 
c=`ls "$f" |awk -F" " '{print $5}' |cut -c11-12` 
d=`ls "$f" |awk -F" " '{print $5}' |cut -c14-15` 

Это не принимает во внимание, что $f все еще содержит /my/path/, использует пространство как разделитель полей без ощутимой причины и порезы на неправильные позиции символов. Вот более простой подход:

#!/bin/bash 
FILES=my/path/* 
for f in $FILES 
do newf=`sed 's/Subscriber_ID_List_\(....\)_\(..\)_\(..\).csv/TheFile_\1\2\3.csv/' <<<$f` 
    cp "$f" "$newf" 
done 
Смежные вопросы