파일 이름을 인쇄하고 각 찾기 결과에 대해 명령을 실행합니다.

파일 이름을 인쇄하고 각 찾기 결과에 대해 명령을 실행합니다.

내 에 두 개의 명령( echo및 ) 을 적용하려고 합니다 .haml --checkfind

haml --check `find . -name "*.haml"`
# return Syntax error on line 2: Illegal nesting: nesting within plain text is illegal.
# but I don't know which file

echo `find . -name "*.haml"`
# returns list of files (space separated) 

이상적으로는 파일 이름을 인쇄한 haml --check다음 stdout.

답변1

xargs가 없는 방법도 있습니다.

find . -name "*.haml" -ls -exec haml --check {} \;

경로가 있는 파일 이름만 인쇄합니다.

find . -name "*.haml" -print -exec haml --check {} \;

답변2

find . -name "*.haml" -print0 | xargs -0 -n 1 --no-run-if-empty haml --check 

발견된 각 파일에 대해 haml을 실행합니다.find

haml한 번의 호출로 여러 파일을 얻을 수 있는 경우 생략 가능-n 1

답변3

다음은 GNU 특정 "-print0" 및 "xargs -0" 트릭을 사용하지 않고 find를 사용하여 여러 명령을 실행하는 이식 가능하고 효율적인 방법입니다.

find . -name "*.haml" -exec sh -c 'for i; do echo $i;ls -l $i;haml --check $i; done' sh {} +

관련 정보