find : 결과를 날짜 순으로 정렬?

아주 잠깐 검색해본 결과로는, find 자체로는 ‘정렬’까지는 해줄 수 없는 듯 하다. 대신, 날짜를 넣어서 출력을 해줄 수는 있다.

내 지식 창고(寶庫라 할만 하다)중 하나인 StackExchange 에서 도움을 얻었다.

먼저, find 로 검색을 한 뒤, 그 파일의 수정 날짜를 출력하려면 %Tk 를 사용한다.

$ find <Dir> -maxdepth 1 -name 'turned_on_by_cubietruck*' -printf "%T@ %p\n"
1601907123.4714274210 /storage/turned_on_by_cubietruck-20201005-2310
1601968924.0174839570 /storage/turned_on_by_cubietruck-20201006-1620

-maxdepth 는 현재 디렉토리에서만 검색하라는 뜻이다.

중요한 부분은 -print 이 후 인데, 여기 형식은 “%Tk %p” 가 된다.

  • %Tk : 파일의 최종 수정 시간을 k 형식으로 나타낸다. k 는 다음과 같다.
  • @ : 1970.01.01 GMT 이후 현재까지 경과 시간을 ‘초’로 표시
  • c : 로캘의 날짜/시간 형식
  • %p : 파일명

StackExchange 에서는 %Tk %Tc 를 모두 썼지만, 나는 정렬을 위해서 하나만 사용했다.

이제 저 결과를 가지고 정렬을 한 뒤, 정렬을 위해서만 필요했던 %T@ 부분은 버린다.

find <Dir> -maxdepth 1 -name 'turned_on_by_cubietruck*' -printf "%T@ %p\n" | sort -nr | cut -d " " -f 2-
/storage/turned_on_by_cubietruck-20201005-2310
/storage/turned_on_by_cubietruck-20201006-1620

sort 와 cut 는 man page 를 참고하고, 여기선 간단하게만 정리한다.

sort :

-n : 숫자를 기준으로 정렬
-r : 역순 정렬 (내림차순)

cut :

-d ” ” : Deliminator, 즉 필드 구분자로 공백을 사용.
-f 2- : 몇번째 필드부터 끝까지 출력할지 여부. 2- 이므로, 두번째부터 끝까지.


오늘도 즐거운 Linux Command Line 생활!

협찬(?)은, 기타리스트 Chuck Loeb 님께서, 1988년도 앨범 ‘My Shining Hour’ 로 해주심.

안녕하세요. 글 남겨주셔서 고맙습니다.