수만 개의 파일이 있는 디렉토리가 있습니다. 최근 수정된 파일(마지막 날 수정된 파일 등)을 나열하고 싶습니다.
다음 명령은 작동하지만 ls
폴더의 모든 파일에 영향을 미치기 때문에 속도가 느립니다.
ls -rt | tail -n 10
다음 명령은 더 빠르지만 출력은 다음만큼 자세하지 않습니다 ls
.
find -mtime -1
ls
최근에 수정된 파일(설정 번호 또는 날짜별)을 유사한 출력 으로 더 빠르게 나열하는 방법이 있습니까 ?
답변1
최소한 GNU와 FreeBSD에는 다음과 유사한 출력을 생성하는 find
this 이 있습니다 .-ls
ls
$ find . -ls
392815 4 drwxr-xr-x 2 user group 4096 Jul 22 18:39 .
392816 0 -rw-r--r-- 1 user group 0 Jul 22 18:39 ./foo.txt
392818 0 -rw-r--r-- 1 user group 0 Jul 22 18:39 ./bar.txt
GNU find는 또한 조작의 형태로 매우 구성 가능한 출력을 제공합니다 -printf
.
즉, 무엇이 당신을 ls
그렇게 느리게 만드는지 궁금합니다. 둘 다 전체 디렉토리를 읽고 모든 파일을 호출하여 find
날짜 를 찾아야 하므로 큰 차이는 없습니다. 전체 파일 목록을 정렬해야 하므로 파일 수가 너무 많으면 영향을 미칠 수 있습니다. 이 경우 파일을 다른 디렉터리에 분산시키는 것을 고려할 수 있습니다(아마도 파일 날짜를 기준으로). 제거 하고 사용 하지 않는 것이 도움이 될 수 있습니다.ls
lstat()
ls
-r
head
tail
답변2
사용 가능한 zsh 셸이 있는 경우 일부 날짜 필터링 및 정렬을 수행할 수 있습니다.
두 개의 최신 파일을 나열하십시오.
ls -ld -- *(om[1,2])
( D
glob 한정자를 추가하면 숨겨진 파일도 고려됩니다).
가장 오래된 파일 2개를 나열합니다(생성된 목록의 끝부터 거꾸로 계산).
ls -ld -- *(om[-2,-1])
또는:
ls -ld -- *(Om[1,2])
5일 전에 수정된 파일 목록:
ls -ld -- *(m+4)
( find -mtime +4
나이를 일수로 반올림한 경우 처럼엄격하게4)보다 큼.
지난 5일 동안 수정된 파일 목록:
ls -ld -- *(m-5)
이것들은 모두 예시입니다"글로벌 예선". zsh 쉘은 여기서 모든 어려운 작업을 수행합니다. 일치하는 파일 이름(있는 경우)을 제공하고 목록을 ls
list에 전달합니다.
결과를 일반 파일(디렉토리, 소켓, 파이프 등이 아닌)로만 제한하려면 다음 .
과 같이 사용하십시오.
목록분명히지난 5일 동안 수정된 파일:
ls -ld -- *(.m-5)