디렉토리의 모든 파일을 나열하는 방법이 있습니까?나무단일 목록에서 Linux의 수정 시간을 기준으로 정렬하시겠습니까?
ls -Rlt
파일은 반복적으로 나열되지만 출력에서는 서로 다른 폴더에 그룹화되므로 출력이 전체적으로 정렬되지는 않습니다. 단지 각 디렉토리의 내용이 시간별로 정렬되어 있을 뿐입니다.
답변1
예, GNU를 사용하여 이를 수행할 수 있습니다 find
. 파일 이름에 개행 문자가 포함되어 있지 않으면 다음을 수행할 수 있습니다.
find -printf '%T@ %p\n' | sort -gk1,1
설명하다
옵션으로 다양한 정보를 인쇄
-printf
할 수 있습니다 .find
이 예에서는 다음을 사용합니다.%Tk File's last modification time in the format specified by k, which is the same as for %A. @ seconds since Jan. 1, 1970, 00:00 GMT, with fractional part. %p File's name.
따라서
%T@ %p\n
에포크 이후 파일 수정 시간(초 단위%T@
), 공백, 파일 이름(%p
)이 인쇄됩니다.그런 다음 첫 번째 필드( )에서만
sort
숫자로 정렬된( ) 개체 에 전달합니다.-n
-k1,1
이렇게 하면 모든 파일과 디렉터리가 반환됩니다. 일반 파일(디렉토리, 장치 파일, 링크 등 제외)로만 제한하려면 명령 -type f
에 추가하세요 find
.
사람이 읽을 수 있는 날짜를 얻으려면 GNU를 사용하여 출력을 처리할 수 있습니다 date
.
find -printf '%T@ %p\t\n' | sort -gk1,1 |
perl -lne 's/([^ ]*)//;chomp($i=`date -d \@$1`); print "$i $_"'
여기서 perl
명령은 공백이 아닌 첫 번째 문자열(날짜)을 GNU에서 처리한 대로 자체로 바꿉니다 date
.
개행 문자가 포함된 파일 이름의 경우 위 작업이 실패합니다. 개행을 처리하려면 다음을 사용하십시오.
find -printf '%p\t%T@\0' | sort -zt$'\t' -nk2 | tr '\0' '\n'
find
대신 각 파일 이름 끝에 a를 출력 한다는 점을 제외하면 이는 동일합니다 \0
. \n
GNU는 sort
널로 구분된 출력을 처리할 수 있으므로 여전히 올바르게 정렬됩니다. 최종 tr
명령은 \0
다시 \n
.
답변2
그리고 zsh
:
print -rl -- **/*(D.om)
**/*모든 수준의 하위 디렉터리와 일치합니다(심볼릭 링크를 따르지 않음). D.
한정자는 일반 파일을 나열하고 om
수정 시간을 기준으로 최신 파일부터 정렬합니다.
디렉토리 부분 없이 파일 이름을 나열하려면 t
기록 수정자를 추가하세요.
print -rl -- **/*(D.om:t)
답변3
글쎄, 수천 개의 파일에 대해 이야기하고 ARG_MAX
제한을 초과하는 경우 결과는 그다지 좋지 않지만 가장 간단한 해결책은 다음과 같습니다.
find . ! -type d -exec ls -t {} +
...찾을 수 있는 모든 파일 배치를 호출합니다 ls
. <=ARG_MAX
또한 경로 이름의 문자에는 임의의 제한이 없으며 함께 처리할 수 있는 최대 매개변수 수에만 제한이 있습니다.
find
의 출력과 동일한 방식으로 출력을 작성 합니다 . 물론, -l
GNU의 와 같은 다른 옵션을 사용할 수 있습니다 -h
. 다음은 제가 일주일 전에 만든 작은 트리에 나열되어 있습니다.
find . ! -type d -exec ls -lht {} +
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir/dir1/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir/dir2/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir/dir3/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir2/dir1/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir2/dir2/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 19:00 ./dir2/dir3/file
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir/file1
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir/file2
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir/file3
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir2/file1
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir2/file2
-rw-r--r-- 1 mikeserv mikeserv 0 Dec 19 18:57 ./dir2/file3
...분명히 디렉토리별로 그룹화되지 않았습니다.
내 컴퓨터에서...
getconf ARG_MAX
2091752
...하지만 그건 현실적이지 않다고 생각해요. 평균 65만원 정도 되는 것 같아요.