2016-10-04 4 views
0

内の文字列を使用して別のtarファイルを作成します。 EXについて。、acqDouモジュールが生成するUNIXシェル:我々はモジュール名で指定されたファイルを生成するサービスを持つ配列

acqDou_0001.out 
    acqDou_08981.out 
    acqDou_23423.out 

acq_cheatモジュールは、ほぼ同じ名前のファイルを生成しますが、最後の番号はビット切り抜いたです。

私のrequirmentは、acqDou.taracq_cheat.tar

以下

私はattmeptedプログラムの開発であるとして、モジュール名、モジュールごとにtarファイルに基づいて、これらのファイルをタールである:

cd /home/swap/output/outfiles 
for i in *; 
do 
     j=`echo $i | grep -v 'out$'` 
     if [ -z $j ]; 
      then continue; 
     fi 
    count1=$(echo $i | tr -d -c '_' | wc -m) 
    if [ $count1 -eq 2 ] 
    then 
     two=`ls -1 $i | cut -d'_' -f2 | cut -d'.' -f1 | uniq` 
    else 
     two=`ls -1 $i | cut -d'_' -f1 | cut -d'.' -f1 | uniq` 
    fi 
    _FILE="${_FILE} $two" 
done 
_FILE2=`echo "${_FILE[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '` 
echo "${_FILE2}" 
for m in "${_FILE2}" 
do 
    ls -lrt *${m}*.x 
tar -cpf $m.tar /home/swap/output/outfiles/*${m}* 
done 
} 
+0

あなたが最適化/固定に助けを得ることができるようにあなたが試みたものを提供してください。このサイトはあなたにプログラムを提供するものではありません。 – Fazlin

+0

ファズリン、ここに試行されたコードを貼り付けました。 最初のループは、ファイル名を検索するキーワードです。また、tarファイルの名前を付けるのにも役立ちます。 2番目のループは、tarファイルを試行することです。しかし、それは動作していません。 – user2765315

答えて

-1

ディレクトリに存在するすべての可能なモジュールタイプのタールをワンショットで作成します。 module_XXXX.out形式で -

あなたは... acqDou、acqDumb、acqcheat、acqfunnyという名前のモジュールを持って言うことができます。以下に示すように、このようになります5月

何か。だから私は4つのモジュールとそれぞれの500のファイルをディレクトリに持っています。彼らはすべて空ですが、それは問題ではありません。 (ディレクトリ内に存在可能なモジュール名を与える)

我々は数字を取り除き(SED使用して)、ファイルを一覧表示することができ、ソートやユニークなリスト:目標を達成するために

>Wed Oct 05|01:15:13|[email protected][STATION]:/root/ga/scripts/temp/tmp % ls -lrtha *.out|head -7 ; echo ; ls -lrtha |tail -8 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqDou_0.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqDumb_0.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqcheat_0.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqfunny_0.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqDou_1.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqDumb_1.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqcheat_1.out 

-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqDumb_498.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqcheat_498.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqfunny_498.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqDou_499.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqDumb_499.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqcheat_499.out 
-rw-rw-r--. 1 gaurav gaurav 0 Oct 5 00:58 acqfunny_499.out 
drwxrwxr-x. 2 gaurav gaurav 64K Oct 5 01:14 . 
>Wed Oct 05|01:15:30|[email protected][STATION]:/root/ga/scripts/temp/tmp % 

それをwhileループに送り、モジュール名を一つずつ読み込み、出力モジュールtarfile、モジュール名wiseを生成し、そのモジュールのファイルしか持たないようにします。ここで

はコマンドです:私たちが終了したら

ls *.out |sed 's/[0-9]//g'|sort|uniq|sed 's/_.out//g'|while read module 
do 
    tar -cvf ${module}.tar ${module}* 
done 

私たちは、このような何かを得ます。

4モジュール名とともにtarファイルが作成されました。また、それぞれのモジュールファイルが含まれています。 tar -tvfコマンドを使って見てみましょう。私はすべてのtarファイルでそれを実行し、ファイルごとに出力として2行だけを取ります。

>Wed Oct 05|01:18:29|[email protected][STATION]:/root/ga/scripts/temp/tmp % ls *.tar|while read file 
do 
    echo ;echo "Looking inside file: $file" 
    tar -tvf $file|head -2 
done 

Looking inside file: acqcheat.tar 
-rw-rw-r-- gaurav/gaurav  0 2016-10-05 00:58 acqcheat_0.out 
-rw-rw-r-- gaurav/gaurav  0 2016-10-05 00:58 acqcheat_100.out 

Looking inside file: acqDou.tar 
-rw-rw-r-- gaurav/gaurav  0 2016-10-05 00:58 acqDou_0.out 
-rw-rw-r-- gaurav/gaurav  0 2016-10-05 00:58 acqDou_100.out 

Looking inside file: acqDumb.tar 
-rw-rw-r-- gaurav/gaurav  0 2016-10-05 00:58 acqDumb_0.out 
-rw-rw-r-- gaurav/gaurav  0 2016-10-05 00:58 acqDumb_100.out 

Looking inside file: acqfunny.tar 
-rw-rw-r-- gaurav/gaurav  0 2016-10-05 00:58 acqfunny_0.out 
-rw-rw-r-- gaurav/gaurav  0 2016-10-05 00:58 acqfunny_100.out 
>Wed Oct 05|01:18:42|[email protected][STATION]:/root/ga/scripts/temp/tmp % 

実際には各tarファイルに500個のファイルがあります。あまりにもそれを確認してみましょう。

>Wed Oct 05|01:18:42|[email protected][STATION]:/root/ga/scripts/temp/tmp % ls *.tar|while read file 
do 
    echo ; echo "File count in tar file: $file" 
    tar -tvf $file|wc -l 
done 

File count in tar file: acqcheat.tar 
500 

File count in tar file: acqDou.tar 
500 

File count in tar file: acqDumb.tar 
500 

File count in tar file: acqfunny.tar 
500 
>Wed Oct 05|01:20:03|[email protected][STATION]:/root/ga/scripts/temp/tmp % 

乾杯、 のGaurav

+0

私の要件はいくつか変更されています。出来た。おかげでトンGaurav – user2765315

+0

私の喜び.. .. :) – User9102d82

2

場合、あなたはファイルをその名前で区別することができるので、解は簡単な単純なものにすることができます。

tar cf acqDou.tar acqDou*.out* 
tar cf acq_cheat.tar acq_cheat*.out* 

このようなモジュールあなたは単純なforループを適用してそれらを処理することさえできます:

for m in acqDou acq_cheat 
    do 
    tar cf $m.tar ${m}*.out* 
done 
+0

私はこのforループに問題があります。ファイル名はacqDou_12345.out.1です。 このtar構文はここでは機能しません。 – user2765315

+0

私は参照してください。次に、ファイル名に合うようにマスクを設定する必要があります。例:tar cf $ m.tar $ {m} *。out * – quantummind

関連する問題