2016-07-13 8 views
1

私はforループを持っていて、ディレクトリ内のファイルをリストし、それらの名前に基づいてさまざまな適切なフォルダに移動します。 - 100個のファイル 各実行のforループ条件の再評価

  • Prefix_filename101_suffix2_date.txt - 150個のファイル
  • Prefix_filename251_suffix3_date.txt - 50個のファイル
  • 私は希望

    1. Prefix_filename1_suffix1_date.txt:

      は、以下のような300個のファイルが存在していると言いますループの先頭にあるファイルのプレフィックスとフォルダの位置を知っているだけです。

      forループを入力するとファイル名がわかります。これは1つの課題です。

      正規表現を使用してすべてのファイルに共通の接尾辞を見つけ、awkを使用して接頭辞と接尾辞の間にファイル名を取得します。したがって、正規表現awkを使用するには、forループを実行するにはファイル名が必要です。

      これらのファイルを処理している間に、私はすべての類似したファイルを一緒に移動するので、(3つのファイルセットがある場合)、ファイルは3回実行されます(1番目、101番目および251番目)。元々ループが300回実行されているため、処理するファイルがないため何もしないでください。

      どうすればこの問題を回避できますか?また、ループをわずか3回実行するようにします。

    +0

    for-loopを投稿できますか? $(ls $ {file_prefix} *)内のfのための –

    +1

    ; do – zeushvk

    +0

    forループの前にcd folder_locationを実行します – zeushvk

    答えて

    0

    、ファイル名のみが与えられた場所で、それらのアンダースコアを持っていると仮定すると(ない接頭、またはサフィックス中)、ちょうどcut 3番目のフィールド(すなわちサフィックス)、およびsort -u我々は3つの接尾辞を持っています。それをループにパイプし、mvの一致するファイルをアドホックのサブディレクトリにコピーします。

    cd folder_location 
    echo ${file_prefix}*.txt | cut -d '_' -f 3 | sort -u | \ 
    while read suffix ; do 
        [ -d ${suffix} ] || mkdir ${suffix} 
        mv ${file_prefix}*_${suffix}_*.txt ${suffix}/ 
    done 
    
    関連する問題