간단한 질문입니다. 다음 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;
면 종료합니다.