find 명령과 함께 for 루프 사용

find 명령과 함께 for 루프 사용

내 시스템의 모든 Java 버전을 읽고 싶습니다.

for i in 'find / -name java 2>/dev/null' 
do
echo $i checking
$i -version
done

오류가 발생합니다.

찾기: 경로는 표현식보다 앞에 있어야 합니다: 2>/dev/null

사용법: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [표현식]

문제가 무엇입니까?

답변1

forfor 루프가 실제로 반복되고 있기 때문에 루프에서 해당 오류가 발생합니다.하나요소--, 명령 대신 " find / -name java 2>/dev/null"이 실행 중입니다.

echo find / -name java 2>/dev/null checking
find / -name java 2>/dev/null -version

...여기서 find오류가 발생합니다.

다음을 수행하려고 할 수 있습니다.

for i in `find / -name java 2>/dev/null` 
do
  echo $i checking
  $i -version
done

... (작은 따옴표 대신 백틱 사용), 이 경우 다음과 같은 것을 제안합니다.

find / -name java -exec sh -c '"$1" -version' sh {} \; 2>/dev/null

지적해 주신 don_crissti에게 감사드립니다.Stéphane의 find의 더 나은 버전 ... exec그리고 간접적으로 bash 메소드를 생각나게 합니다.하나결과를 찾고 실행하는 것보다 더 좋은 방법은 무엇일까요?루프 검색:

shopt -s globstar dotglob
for match in /**/java
do
  echo match is "$match"
  "$match" -version
done

관련 정보