2017-02-20 28 views
-2

В каталоге имеется 4 файла-заглушки.Как переименовать фиктивный файл, если фактический файл недоступен

  1. acc_bal.1.txt
  2. acc_dir.1.txt
  3. acc_liq.1.txt
  4. acc_trans.1.txt

Использование какой-либо другой процесс, я получаю некоторые файлы в том же каталоге.

Для exapmple:
в этом каталоге следующие файлы coming--
acc_bal_1_20022017_1.txt
acc_dir_1_20022017_1.txt
. # [* 20022017- текущая дата DDMMYYYY]

С acc_liq_1_20022017_1.txt и acc_trans_1_20022017.txt файлы отсутствуют, но нам нужны все 4 файла в соответствии с требованиями.

Так считают фиктивные файлы acc_liq.1.txt, acc_trans.1.txt и переименовать его в

acc_liq_1_20022017_1.txt
acc_trans_1_20022017_1.txt

Мне нужно написать unix сценарий в шпаклере для выше положение дел.

Я начал с ниже сценарием
for mypattern in ls -1 DIR | cut -d'_' -f3-4 | uniq | awk -F'/' '{print $NF}'

Но я не получаю какую-либо идею, чтобы идти дальше, как я новичок в UNIX. Пожалуйста, укажите правильное решение.

+0

вам нужно добавить ** дату ** после каждого '1' право? –

+0

Да .. фиктивные файлы содержат **. 1.txt ** и нам нужно изменить его на ** _ 1_20022017_1.txt **, если он недоступен для acc_liq или acc_trans или acc_bal или acc_dir – Abhi

+0

Я думаю, что сценарий нуждается в цикле, который проверяет для наличия требуемого файла (например: acc_bal_1_20022017_1.txt).Если он недоступен, переименуйте конкретный файл-заглушку, чтобы получить недопустимый файл – Abhi

ответ

0

Я чувствую, что, вероятно, некоторые другие подводные камни где-то, но следующее должно вам начать работу:

d=$(date +"_1_%d%m%Y_") 

for f in *.1.txt 
do 
    nf=${f/./$d} 

    [[ -f "$nf" ]] || mv "$f" "$nf" 
done 

Это изначально предполагает, что вы находитесь в каталоге фиктивных файлов и все другие корректные файлы не заканчиваются in '.1.txt'

+0

Спасибо за ваш ответ. здесь я не хочу переименовывать все фиктивные файлы. если правильный файл отсутствует, то переименуйте только соответствующий файл фиктивного файла. – Abhi

+0

. Что будет делать -f, если файл с именем фиктивного и вставленной датой существует, он пропустит и перейдет к следующему файлу – grail

0

Наконец-то я получил ответ, который приведен ниже.

for myfile in `ls -1 DIR | cut -d'_' -f3-5 | sort | uniq | awk -F'/' '{print $NF}'` 
do 
    if [ ! -f "acc_bal_$myfile" ] 
    then 
    cp acc_bal.1.txt acc_bal_"$myfile" 
    fi 
    if [ ! -f "acc_dir_$myfile" ] 
    then 
    cp acc_dir.1.txt acc_dir_"$myfile" 
    fi 
    if [ ! -f "acc_liq_$myfile" ] 
    then 
    cp acc_liq.1.txt acc_liq_"$myfile" 
    fi 
    if [ ! -f "acc_trans_$myfile" ] 
    then 
    cp acc_trans.1.txt acc_trans_"$myfile" 
    fi 
done 

Любые изменения приветствуются.