이게 내가 하고 싶은 일이야
find . -maxdepth 1 -type d -print0 | xargs -0 -P4 find -name 'war' -type d
null로 끝나는 디렉터리 이름 목록을 만든 다음 이 목록을 xargs에 전달하려고 합니다. xargs는 각 디렉터리 이름에 대해 4개의 프로세스 풀을 사용하여 find를 호출합니다.
내 질문은: 파이프 찾기 명령에서 표준 입력에 어떻게 액세스합니까? 그것은 마치
find <STDIN> -name 'war' -type d
답변1
Find는 표준 입력에서 경로를 읽을 수 없으며 -
다른 많은 프로그램처럼 지정할 수 없습니다.
병렬로 실행하려면 GNU Parallel을 사용하는 것이 좋습니다.
find . -mindepth 1 -maxdepth 1 -type d -print0 | parallel -0 --jobs 4 \
find {} -name "war" -type d
-mindepth 1
첫 번째 조회에 추가된 내용을 확인하세요 . 이를 포함하지 않으면 현재 디렉터리( .
)도 조회 결과 중 하나로 전달되어 이중 결과를 얻게 됩니다.
$ mkdir a b c d e
$ mkdir b/war c/war
$ find . -mindepth 1 -maxdepth 1 -type d -print0 | parallel -0 --jobs 4 \
find {} -name "war" -type d
./b/war
./c/war
$ find . -maxdepth 1 -type d -print0 | parallel -0 --jobs 4 \
find {} -name "war" -type d
./c/war
./b/war
./c/war
./b/war
답변2
이것을 사용하십시오 :
find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} -P4 find "{}" -name "war" -type d
.
더 나은 접근 방식은 경로를 제외하는 것입니다 .
find . -maxdepth 1 -not -path . -type d -print0 |
xargs -0 -I "{}" find "{}" -name "war" -type d