디렉터리의 모든 파일을 재귀적으로 나열하지만 디렉터리 자체는 제외합니다.

디렉터리의 모든 파일을 재귀적으로 나열하지만 디렉터리 자체는 제외합니다.

간단한 질문입니다. 다음 find 명령을 실행하고 있습니다.

find . -type d \( -path ./.git -o   \
                  -path ./log -o    \
                  -path ./public -o \
                  -path ./tmp       \) \
                  -prune -o         \
                  -print

지정된 디렉토리를 제외하고 내 디렉토리의 모든 파일을 나열합니다.

이것은 훌륭하게 작동하지만, 제가 하고 싶은 일은 출력에서 ​​실제 디렉터리를 제외하는 것입니다. 따라서 디렉터리 구조가 다음과 같은 경우:

test
  -- foo.text
  -- bar.text

내가 보고 싶은 명령을 실행할 때:

./test/foo.text
./test/bar.text

바꾸다:

.
./test
./test/foo.text
./test/bar.text

누구든지 도와줄 수 있나요?

답변1

find . -type f

그렇게 할 것이다. 파일 이름에 대해 작업을 수행하려면 exec를 실행할 수 있습니다.

답변2

그냥 사용하십시오 ! -type d:

find . -type d \( -path ./.git -o \
                  -path ./log -o \
                  -path ./public -o \
                  -path ./tmp \) -prune -o \
       ! -type d -print

답변3

이것은 한 가지 방법입니다. 나는 약간의 bash를 find사용하여 출력을 파이프했으며 xargs"디렉토리가 아닌가요?"라고 묻습니다. 그렇지 않은 경우 터미널에 다시 표시됩니다.

그녀의 전체 폭발은 다음과 같습니다.

find . -type d \( -path ./.git -o -path ./log -o -path ./public -o -path ./tmp \) -prune -o -print | xargs -i bash -c 'if [ ! -d "{}" ]; then echo "{}"; fi'

이것은 단지 내가 추가한 것입니다:

xargs -i bash -c 'if [ ! -d "{}" ]; then echo "{}"; fi'

설명하다:

xargs -i"{}" 문자열을 매개변수(파이프를 통해 전달된 매개변수)로 바꿉니다.

bash -c문자열에서 명령 읽기

if [ ! -d "{}"];이것은 디렉토리입니까?

echo "{}"검색 결과를 에코합니다.

fi;면 종료합니다.

관련 정보