2016-11-09 2 views
1

json 파일을 예쁜 인쇄 형식으로 변환하는 스크립트 (convert.sh)를 만들었습니다. 예 :유닉스 디렉토리의 파일을 반복적으로 처리합니다.

convert.sh source.json 

원본을 대체 할 원본 파일은 예쁜 인쇄 형식으로 덮어 씁니다. convert.sh의

콘텐츠

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

그것은 하나 개의 파일에 대해 매우 잘 작동합니다. 그러나, 나는 디렉토리 아래의 모든 파일을 처리하고 싶습니다. 예 :

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

모든 단일 명령을 수행 하시겠습니까? 시도했지만

find dir1 | grep .json | xargs convert.sh 

성공하지 못했습니다. 친절하게 도와주세요. 고마워요! 일부 패턴 (2) 발견 된 각 파일에 스크립트를 실행 일치하는 파일 (1) 검색

+0

은'처음 이후 모든 것을 제거합니다. 'find dir1'은 완전한 파일 목록을 출력합니까? 일부 버전은 그렇게하지 않을 것입니다. 'fin dir1 -print' (또는 유사)가 필요할 수도 있습니다. 행운을 빕니다. – shellter

+0

찾기 결과가 정확합니다. 문제가 그것과 관련이없는 것 같습니다. –

+0

작성된 tmp 파일을보기 위해 내 스크립트 "mv $ INFILE.tmp $ INFILE"의 마지막 줄을 주석 처리하려고했습니다. 전체 xargs 명령을 실행 한 후에 생성 된 하나의 tmp 파일 만 발견했습니다. 그것은 find 목록 (find 결과의 첫 번째 줄)에있는 하나의 파일 만 처리 할 수있는 것 같습니다. –

답변

2

사용 find : |`

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

정말 고마워요! 그것은 작동합니다. 그냥 우리가 왜 필요한지 궁금해. –

+0

';'는 쉘의 순차 연산자이지만, 서브 커맨드의 끝을 구분할 필요가 있으므로, 쉘에게 그 자체를 해석하지 말 것을 요구할 필요가 있으므로, 접두사 \가 붙습니다. –

관련 문제