작업을 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 {} \;