디렉토리와 관련된“찾기”출력 자체가 경로에 표시되는 것을 원하지 않습니다. 예를

작업을 find위해 주어진 루트에 모든 파일과 디렉토리를 재귀 적으로 나열하는 데 사용하고 싶습니다 cpio. 그러나 루트 디렉토리 자체가 경로에 표시되는 것을 원하지 않습니다. 예를 들어, 나는 현재 다음을 얻습니다.

$ find diskimg
diskimg
diskimg/file1
diskimg/dir1
diskimg/dir1/file2

하지만 받고 싶습니다

file1
dir1
dir1/file2

(루트도 원하는 출력이 아니지만으로 쉽게 제거 할 수 있습니다 tail).

저는 OS X를 사용하고 있으며 가능한 경우 추가 도구 (예 : GNU find)를 설치하지 않으려 고합니다. 다른 OS X 사용자와 작성한 스크립트를 공유하고 싶습니다.

cut루트 목록을 잘라 내기 위해이 작업을 수행 할 수 있다는 것을 알고 있지만 차선책으로 보입니다. 더 나은 솔루션이 있습니까?



답변

수행하려는 작업이 너무 복잡하지 않은 경우 sed를 사용 하여이 작업을 수행 할 수 있습니다.

find diskimg | sed -n 's|^diskimg/||p'

또는 cut:

find diskimg | cut -sd / -f 2-

답변

cd 먼저 디렉토리에 :

cd diskimg && find .

완료되면 루트 디렉토리로 돌아갑니다.

이 경우 파일 앞에 ./가 붙습니다. 내가 볼 수있는 유일한 방법은 다음을 사용하는 것입니다 cut.

{ cd diskimg && find .; } | tail -n +2 | cut -c 3-

쉘의 현재 디렉토리를 변경하지 않으려면 서브 쉘을 사용하십시오 (파이프의 왼쪽이 이미 서브 쉘에서 실행될 때 출력을 파이핑하는 경우 필요하지 않습니다).

(cd diskimg && find .)

답변

또 다른 더 복잡하지만 다른 답변의 찾기 접근 방식 만 사용하십시오.

find diskimg -mindepth 1 -printf '%P\n'

답변

realpath유틸리티를 사용하십시오 :

find diskimg -exec realpath --relative-to diskimg {} \;