재귀적 디렉터리 목록의 출력을 평면화합니다.

재귀적 디렉터리 목록의 출력을 평면화합니다.

디렉토리의 모든 파일을 나열하는 방법이 있습니까?나무단일 목록에서 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. \nGNU는 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의 출력과 동일한 방식으로 출력을 작성 합니다 . 물론, -lGNU의 와 같은 다른 옵션을 사용할 수 있습니다 -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만원 정도 되는 것 같아요.

관련 정보