출력 없음: busybox find . -exec sh -c ' readlink -f "$1" | -exec sh -c ' readlink -f "$1" | tail -n +2 ' sh {} \;

출력 없음: busybox find . -exec sh -c ' readlink -f "$1" | -exec sh -c ' readlink -f "$1" | tail -n +2 ' sh {} \;

Busybox 1.31.1에만 액세스할 수 있습니다.

처음에는 출력의 현재 작업 디렉터리(단일 지점)를 삭제하고 싶었습니다.

예:

/prueba$ ls
uno dos tres

내가:

$ busybox find .
.
./uno
./dos
./tres

이 작업은 다음 방법 중 하나로 쉽게 수행할 수 있습니다.

busybox find . -not -path .
busybox find . -mindepth 1

이제 내가 전에 시도한 것은 다음과 같습니다.

busybox find . -exec sh -c ' readlink -f "$1" | tail -n +2 ' sh {} \;

아무것도 인쇄하지 않습니다. 자세한 출력이 활성화된 경우:

==> standard input <==
==> standard input <==
==> standard input <==
==> standard input <==
==> standard input <==

행 주소가 1이면 출력은 완전히 다릅니다.

busybox find . -exec sh -c ' readlink -f "$1" | tail -n +1 ' sh {} \;
==> standard input <==
/tmp/prueba
==> standard input <==
/tmp/prueba/tres
==> standard input <==
/tmp/prueba/dos
==> standard input <==
/tmp/prueba/uno

어떻게 되어가나요?

답변1

이것

-exec some command with parms {} \;

각 파일에 대해 이 명령을 한 번씩 호출합니다. 귀하의 경우 readlink한 줄의 출력이 출력된 다음 tail -n +2첫 번째 줄을 제거하여 아무것도 남기지 않습니다. 이것을 사용하면 입력이 출력에 복사된다는 것을 tail -n +1장황하게 표현하는 방법일 뿐입니다 .cat

이를 재정의하면 tail -n +2아래와 같이 암시적 루프 외부에 있게 됩니다.

busybox find . -exec sh -c ' readlink -f "$1" ' sh {} \; | tail -n +2

기대했던 결과를 얻을 수 있을 것입니다.

명령 실행을 일괄 처리하여 명령의 효율성을 높일 수 있습니다.

busybox find . -exec readlink -f -- {} + | tail -n +2

여러 파일을 얻으려면 실행하려는 명령이 필요합니다. 이렇게 하면 find가 파일당 한 번이 아니라 파일 이름의 전체 버퍼가 있을 때만 명령을 실행하기 때문에 +find보다 명령을 더 적게 실행할 수 있습니다 . \;물론 필요하지 않은 것들도 삭제했습니다 sh.

관련 정보