터미널에서 x바이트보다 크거나 작은 파일을 어떻게 찾을 수 있나요?
나는 다음과 같은 일을 할 수 있을 것 같아요
find . -exec ls -l {} \;
그런 다음 결과를 다음으로 파이프합니다.awk
파일 크기별로 필터링합니다. 하지만 이보다 더 쉬운 방법은 없을까요?
답변1
사용:
find . -type f -size +4096c
4096바이트보다 큰 파일을 찾으려면
그리고 :
find . -type f -size -4096c
4096바이트보다 작은 파일을 찾으려면
크기 전환 후 + 및 - 차이를 확인하세요.
스위치 -size
는 다음과 같이 설명했습니다.
-size n[cwbkMG]
File uses n units of space. The following suffixes can be used:
`b' for 512-byte blocks (this is the default if no suffix is
used)
`c' for bytes
`w' for two-byte words
`k' for Kilobytes (units of 1024 bytes)
`M' for Megabytes (units of 1048576 bytes)
`G' for Gigabytes (units of 1073741824 bytes)
The size does not count indirect blocks, but it does count
blocks in sparse files that are not actually allocated. Bear in
mind that the `%k' and `%b' format specifiers of -printf handle
sparse files differently. The `b' suffix always denotes
512-byte blocks and never 1 Kilobyte blocks, which is different
to the behaviour of -ls.
답변2
find
AWK에 연결하지 않고 단독으로 유용할 수도 있다고 생각합니다 . 예를 들어,
find ~ -type f -size +2k -exec ls -sh {} \;
물결표는 검색을 시작할 위치를 나타내며 결과에는 2KB보다 큰 파일만 표시됩니다.
멋지게 만들기 위해 -exec
옵션을 사용하여 이러한 디렉터리를 크기와 함께 나열하는 또 다른 명령을 실행할 수 있습니다.
자세한 내용은 다음을 읽어보세요.매뉴얼 페이지find
.
답변3
AWK는 이런 종류의 작업에 정말 쉽습니다. 질문하신 대로 파일 크기 확인과 관련하여 수행할 수 있는 작업은 다음과 같습니다.
200바이트보다 큰 파일을 나열합니다.
ls -l | awk '{if ($5 > 200) print $8}'
200바이트 미만의 파일을 나열하고 해당 목록을 파일에 씁니다.
ls -l | awk '{if ($5 < 200) print $8}' | tee -a filelog
0바이트의 파일을 나열하고, 목록을 파일에 기록하고, 빈 파일을 삭제합니다.
ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm
답변4
사용fd
, 이는 것보다 사용하기 훨씬 더 좋습니다.find
fd -S +1g
현재 디렉토리에서 1GB보다 큰 파일을 검색합니다.
fd -S -1g
파일을 검색합니다더 작은1GB 이상