한 줄 명령을 사용하여 지정된 각 디렉터리(또는 하위 디렉터리)를 찾은 bin
다음 그 아래에 있는 모든 파일의 목록을 인쇄하려고 합니다. 하지만 그 아래에 있는 디렉터리 이름도 인쇄하지 않습니다.
이를 달성하기 위해 몇 가지 다른 방법을 시도했지만 지금까지 아무 것도 효과가 없었습니다.
find ~ -type d -name "bin" -exec ls '{}' ';' | grep -v /
이것을 테스트했는데 파일이 나열되었지만 bin 아래의 모든 디렉터리도 나열되었습니다. 따라서 내 디렉토리 아래에 다음과 같은 하위 디렉토리가 있는 경우 bin
:bin
~/home/
~/home/bin
file1.txt
~/home/bin/bin
file2.txt
출력은 다음과 같습니다.
bin
file1.txt
file2.txt
find ~ -type d -name "bin" -exec ls -f '{}' ';'
ls -f
이렇게 하면 파일만 나열된다는 내용을 읽었지만 불행하게도 디렉토리 도 나열됩니다 bin
...
.
그럼 어떻게 해야 하나요?
답변1
을 사용하려면 -path
다음을 시도해 보세요.
find ~ -path '*/bin/*' -type f
이것은 자체적으로 나열되지 않으므로 bin
두 가지를 모두 얻으려면 다음을 수행하십시오.
find ~ \( -path '*/bin/*' -type f \) -o \( -name bin -type d \)
답변2
find
호출을 중첩하면 이 작업을 수행 할 수 있습니다 .
$ find ~ -type d -name bin -exec find '{}' -type f ';'
한 번의 호출을 대체하므로 ls
두 번째 호출 find
에서 두 개 이상의 목록 나열을 원하지 않을 수도 있습니다. 이 경우 위의 . -maxdepth 1
뒤에 추가하세요 -type f
.
답변3
find ~ -type f -size +10M -exec du -sh {} + | sort -rh
find ~
:파일을 검색할 디렉터리를 지정합니다(~
이 예에서는).-type f
: 이렇게 하면 디렉터리가 아닌 일반 파일만 고려됩니다.-size +10M
:검색할 파일의 최소 크기를 지정합니다(이 경우 10MB 이상).-exec du -sh {} +
du -sh
: 발견된 각 파일의 크기를 가져오는 명령을 실행합니다 . 명령이 끝나면+
여러 파일이 한 번에 전달되어 호출 횟수가 줄어들고 성능이 향상됩니다.du
du
sort -rh
: 출력을 사람이 읽을 수 있는 형식(-h
) 및 역순(-r
)으로 크기별로 정렬하므로 가장 큰 파일이 맨 위에 표시됩니다.