전체 디렉터리에서 "ls"를 실행하지 않고 "ls" 스타일 출력에 최근 수정된 파일을 나열하시겠습니까?

전체 디렉터리에서 "ls"를 실행하지 않고 "ls" 스타일 출력에 최근 수정된 파일을 나열하시겠습니까?

수만 개의 파일이 있는 디렉토리가 있습니다. 최근 수정된 파일(마지막 날 수정된 파일 등)을 나열하고 싶습니다.

다음 명령은 작동하지만 ls폴더의 모든 파일에 영향을 미치기 때문에 속도가 느립니다.

ls -rt | tail -n 10

다음 명령은 더 빠르지만 출력은 다음만큼 자세하지 않습니다 ls.

find -mtime -1

ls최근에 수정된 파일(설정 번호 또는 날짜별)을 유사한 출력 으로 더 빠르게 나열하는 방법이 있습니까 ?

답변1

최소한 GNU와 FreeBSD에는 다음과 유사한 출력을 생성하는 findthis 이 있습니다 .-lsls

$ 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날짜 를 찾아야 하므로 큰 차이는 없습니다. 전체 파일 목록을 정렬해야 하므로 파일 수가 너무 많으면 영향을 미칠 수 있습니다. 이 경우 파일을 다른 디렉터리에 분산시키는 것을 고려할 수 있습니다(아마도 파일 날짜를 기준으로). 제거 하고 사용 하지 않는 것이 도움이 될 수 있습니다.lslstat()ls-rheadtail

답변2

사용 가능한 zsh 셸이 있는 경우 일부 날짜 필터링 및 정렬을 수행할 수 있습니다.

두 개의 최신 파일을 나열하십시오.

ls -ld -- *(om[1,2])

( Dglob 한정자를 추가하면 숨겨진 파일도 고려됩니다).

가장 오래된 파일 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 쉘은 여기서 모든 어려운 작업을 수행합니다. 일치하는 파일 이름(있는 경우)을 제공하고 목록을 lslist에 전달합니다.

결과를 일반 파일(디렉토리, 소켓, 파이프 등이 아닌)로만 제한하려면 다음 .과 같이 사용하십시오.

목록분명히지난 5일 동안 수정된 파일:

ls -ld -- *(.m-5)

관련 정보