2017-02-20 1 views
-2

ディレクトリにダミーファイルが4つあります。私はいくつかのファイルを取得していますいくつかの他のプロセスを使用して 実際のファイルが利用できない場合、ダミーファイルの名前を変更する方法

acc_trans.1.txt

  • acc_liq.1.txt
  • acc_dir.1.txt
  • acc_bal.1.txt

    1. 同じディレクトリにあります。

      exapmpleについては

      :以下のファイルをこのディレクトリの下

      acc_dir_1_20022017_1.txt
      acc_bal_1_20022017_1.txt
      coming--です。 #[* 20022017-現在の日付DDMMYYYY] acc_trans_1_20022017.txtファイルacc_liq_1_20022017_1.txt

      以来は、 が欠落しているが、我々は、要件に応じてすべての4つのファイルが必要になります。

      だから、ダミーファイル acc_liq.1.txt、 acc_trans.1.txt 考えると、私は書く必要が

      acc_trans_1_20022017_1.txt acc_liq_1_20022017_1.txt

      に名前を変更上記の状況のた​​めにパテのUNIXスクリプト。

      私は以下のスクリプト
      for mypattern in ls -1 DIR | cut -d'_' -f3-4 | uniq | awk -F'/' '{print $NF}'

      で開始しかし、私は、UNIX用の初心者ですとさらに進行する任意のアイデアを得ていないのです。 正しい解決策を提示してください。

  • +0

    それぞれの「1」の後に**日付**を追加する必要がありますか? –

    +0

    はい..ダミーファイルには** .1txt **が含まれており、acc_liqまたはacc_transまたはacc_balまたはacc_dirには使用できない場合は** _1_20022017_1.txt **に変更する必要があります – 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 
    

    これは、最初は、あなたがダミーファイルのディレクトリにあると仮定し、他のすべての正しいファイルは終わりません'.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 
    

    変更を歓迎します。

    関連する問題