2016-11-09 29 views
1

jsonファイルをかなりの印刷形式に変換するスクリプト(convert.sh)を作成しました。たとえば、ディレクトリ内のファイルを再帰的に処理する

convert.sh source.json 

これは、source.jsonファイルの代わりになります。かなりの印刷形式で上書きされます。 convert.shの

コンテンツは

#!/bin/bash 
INFILE=$1 
python -m json.tool $INFILE > $INFILE.tmp 
mv $INFILE.tmp $INFILE 

これは、1つのファイルのために非常に適しています。しかし、私はディレクトリの下のすべてのファイルを処理したいと思います。例えば

dir1\file1.json 
dir1\file2.json 
dir1\subdir\abc.json 
dir1\subdir2\def.json 
... 

これを行う1行のコマンドはありますか?試しました

find dir1 | grep .json | xargs convert.sh 

成功しませんでした。親切にお手伝いください。どうもありがとう!いくつかのパターンに一致するファイルの(1)検索に

+0

'最初の後にすべて削除|'を。 'find dir1'はあなたの完全なファイルリストを出力しますか?いくつかのバージョンはそれをしません。 'fin dir1 -print'(または同様のもの)が必要かもしれません。がんばろう。 – shellter

+0

findの出力が正しいです。問題はそれに関連していないようだ。 –

+0

作成したtmpファイルを見るために、スクリプト "mv $ INFILE.tmp $ INFILE"の最後の行をコメントアウトしようとしました。 xargsコマンド全体を実行した後、作成されたtmpファイルは1つしか見つかりませんでした。 findリストの1つのファイル(find出力の最初の行)のみを処理できるようです。 –

答えて

2

使用findは、(2)各見つかったファイルにスクリプトを起動します。

find dir1 -name "*.json" -exec convert.sh {} \; 
+0

ありがとう!できます。 \私がなぜ必要なのか不思議。 –

+0

';'はシェルの逐次演算子ですが、サブコマンドの終了を区切るために必要なものがあるので、シェルにそれを解釈しないようにシェルに指示する必要があります。 –

関連する問題