2016-08-06 10 views
1

のために私はそれが基本的な質問である知っているが、私は.I圧縮助けてくださいとtarコマンドには、「タール」コマンドを使用してループ

for i in server.log.2016-07-05 server.log.2016-07-06 ; do tar -zcvf server2.tar.gz $i; done 

を使用して、私のサーバーログファイルをアーカイブ上記のループの出力は次のようになります。

server.log.2016-07-05 
server.log.2016-07-06 

しかし、出力が得られtar -tvf server2.tar.gzを使用してファイルを一覧表示しながら、は次のとおりです。

rw-r--r-- root/root 663643914 2016-07-06 23:59 server.log.2016-07-06 

私は。つまり、2つのファイルをアーカイブしましたが、1つのファイルしか表示されませんでした。つまり、アーカイブには両方のファイルがあります。これで助けてください。

私はこれらの2つのファイルでテストしましたが、私のフォルダには複数のファイルがあります。予想される出力が得られなかったので、私は自分のフォルダ内のすべてのファイルを処理しませんでした。私が使用するつもり正確なループがある:

Previousmonth=$(date "+%b" --date '1 month ago') 

for i in $(ls -l | awk '/'$Previousmonth'/ && /server.log./ {print $NF}');do;tar -zcvf server2.tar.gz $i;done 

私は複数のファイルを圧縮してアーカイブしようとしているが、tar -tvf、それはすべてのファイルを表示しませんを使用してファイルを一覧表示しながら、しています。

答えて

1

ここではループは必要ありません。ちょうどあなたがコマンドラインパラメータとして追加したいすべてのファイルをリスト:

tar -zcvf server2.tar.gz server.log.2016-07-05 server.log.2016-07-06 

同じことがあまりにもあなたの他の例のために行く:ls -lの出力を解析することはひどいですし、強くお勧めしないことを除いて

tar -zcvf server2.tar.gz $(ls -l | awk '/'$Previousmonth'/ && /server.log./ {print $NF}') 

しかし、バックアップのファイル名は、月の番号が含まれているため、 はるかに簡単かつより良い解決策はdateコマンドを使用して年+月番号を取得した後、シェルグロブを使用することです:のための

prefix=$(date +%Y-%m -d 'last month') 
tar -zcvf server2.tar.gz server.log.$prefix-?? 
+0

感謝私が言及したコマンドはどちらもうまくいきましたが、crontabを使って実行する予定でした。 'find'メソッドはすべての月に日付(2016-xx-xx) 'ls -l'以外を圧縮する – karthikraj

+0

あなたの例のようにログファイルの名前が一貫している場合、' ls'や他のコマンドは必要ありません。シンプルなシェルグロブを使って私の更新されたソリューションを見てください – janos

関連する問題