내 에 두 개의 명령( echo
및 ) 을 적용하려고 합니다 .haml --check
find
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 {} +