2017-07-08 13 views
0

仮想フォルダ/hd/log/には2つのフォルダがあり、各フォルダにはこの形式のログファイルがありますfoldername.2017.07.09.log。私は毎晩最後のログファイルをgzipsするcrontabを持っているので、毎日新しいログ名を持つ新しいログファイルがあります。bashを使用して動的にjsonを作成して更新します

私はそのアウトプットのようになりますダイナミックJSONファイルを作成しようとしています:

[ 
    { 
     "Foldername": "foldername", 
     "lastmodifiedfile": "/hd/log/foldername/foldername.2017.07.09.log" 
    }, 
    { 
     "Foldername": "foldername2", 
     "lastmodifiedfile": "/hd/log/foldername2/foldername2.2017.07.09.log" 
    } 
] 

bashスクリプトが動的に各サブフォルダ名(場合にはより多くのフォルダが追加されているか、名前の配列を作成することができるはずです変更されます)、最後に変更されたファイルに直接リンクします。

私はすでにjsonファイルを解析するPHPプログラムを作成していますが、このjsonファイルを動的に作成するための純粋な方法はありません。

ご意見やご指摘をいただければ幸いです。我々は/ HD /すべてのディレクトリがループ順番に各ディレクトリを服用し、その後-1T LSを使用してログインを見つけるここ

+1

これまでに何を試みましたか?私たちにあなたの努力を示してください。 – randomir

+0

* jsonオブジェクトを操作するには、 'jq'を使用し、bashは使用しないことを強くお勧めします。 –

答えて

0
printf "%s" "[" 
for var in $(find /hd/log -type d)  
do 
    path=$("ls -1t $var" | head -1) 
    echo $var"/"$path | awk -F\/ '{ printf "%s","\n\t{\n\t\t\"Foldername\":\""$(NF-1)"\",\n\t\tlastmodifiedfile\":\""$0"\"\n\t},"}' 
done 
printf "%s" "]" 

|ディレクトリに最後に変更されたファイルを取得するには、-1を頭に付ける。パスとファイルはawkで解析され、目的の出力が得られます。最初にawkの区切り文字を/ Fフラグとともに/として設定します。次に、ディレクトリの最後の1つ/区切りのデータ(NF -1 - 数値フィールド-1)と最後に変更したファイル($ 0)の完全な行を使用して、必要に応じてjson構文を出力します。

+0

それはほとんど働いた。私が欲しかったのは唯一のものだが、そのフォルダーの最後に変更されたログファイルがリストされていなかったので、そのフォルダー内のすべてのファイルがリストされた。私はbashに精通していないので、どこでこれを解決しようとしているのか分かりません。 – bran

+0

OK、解決策を修正しました。私はそれが今あなたが必要とするものと一直線になるかもしれないと思います。 –

関連する問題