find를 사용하여 어떻게 ls -F처럼 정렬할 수 있나요? (뒤에 슬래시가 있는 디렉토리)

find를 사용하여 어떻게 ls -F처럼 정렬할 수 있나요? (뒤에 슬래시가 있는 디렉토리)

나는 find파일 목록을 가져온 다음 경로 일치를 위해 grep을 사용했습니다.

$ find pc* | grep -i arthur
pc6/arthurv/untitled-2.py
pc6/arthurv/untitled-3.py
pc6/arthur.py
pc9/Arthur 4C
pc9/Arthur 4C/untitled-1.py
pc9/Arthur 4C/untitled-2.py

나는 이것을 하고 ls -F각 디렉토리에 하나씩 추가하고 싶습니다./

또는 일치하는 모든 대소문자를 구분하지 않고 표시하는 디렉토리를 어떻게 찾을 수 있습니까 arthur?

답변1

findGNU로 조건부 처리를 구현하기 위해 표현식에 논리합을 사용할 수 있습니다 find.

find pc* -type d -printf "%p/\n" -o -print

"pc*"와 일치하는 파일 및 디렉터리로 시작하는 경로에서 모든 항목을 찾아 해당 이름을 인쇄하고 디렉터리인 경우 "/"가 표시됩니다.

작동 방식은 다음과 같습니다.

  • pc*시작 경로를 지정하십시오.
  • -type d일치 디렉토리;
  • -printf "%p/\n"현재 처리된 파일의 경로를 인쇄하고 그 뒤에 "/"와 개행 문자가 따르므로 -type d일치하는 경우에만 실행됩니다 -type d(암시적 접속사가 있음).
  • -o논리합 소개: 앞의 표현이 일치하지 않으면 그 뒤의 표현이 평가됩니다( -type d -printf "%p/\n"접속이 논리합보다 우선순위가 높기 때문에 앞에 나오는 표현이 여기에 있습니다).
  • -print현재 처리 중인 파일의 경로를 출력합니다.

추가 find표현식을 사용하여 대소문자를 구분하지 않는 "arthur"와 일치하는 모든 디렉토리를 표시할 수 있습니다.

find . -type d -iname "*arthur*"

답변2

find수많은 옵션과 세부 정보가 있습니다. 또 다른 변형은 다음을 -printf사용하는 것 입니다.%y

$ find . -printf "%p:%y\n"
./dir:d
./file:f

여기서 %y"d" 또는 "f"를 추가하는 것은 다음과 같습니다.ls -l

$ find . -printf "%p%y\n" | sed 's!d$!/! ; s!f$!!' 

답변3

모든 파일과 디렉터리를 나열하려면 여기에 답변을 추가하세요.

cat <(find old.files -type d -printf "%p/\n") <(find old.files -type f)

산출:

dir1/dir2/
dir1/test.txt
dir1/dir2/test2.txt

뒤에 슬래시가 없는 이전 질문 dir1/dir2:

dir1/dir2
dir1/test.txt
dir1/dir2/test2.txt

궁극적으로 tar 파일과 디렉터리를 비교할 수 있다는 것입니다.

diff <(tar tf old.files.tar | sort -u) <(cat <(find old.files -type d -printf "%p/\n") <(find old.files -type f) | sort -u)

관련 정보