ls 출력을 파일 이름의 날짜별로 역순으로 정렬

ls 출력을 파일 이름의 날짜별로 역순으로 정렬

다음을 사용하여 "일반 순서"로 날짜별로 정렬된 출력을 생성할 수 있습니다.

ls -A -lR | grep "^-" | sed "s/.\{43\}/&\n/" | grep -v "^-" | while read ONELINE; do if echo $ONELINE | cut -d " " -f3 | grep -o '[0-9][0-9]:[0-9][0-9]' > /dev/null 2>&1; then echo $ONELINE | sed "s/.\{7\}/&$(date +%Y) /"; else echo $ONELINE; fi; done

결과:

2011년 1월 23일 10:42 무슨일이 있었나 2007.12.20.avi
2009년 6월 26일 뭔가2009.06.25.avi
2010년 2월 12일 뭔가2010.02.11.avi
2011년 1월 29일 09:17 무슨일이 있었나 2011.01.27.avi
2011년 2월 11일 20:06 무슨일이 있었나 2011.02.10.avi
2011년 2월 27일 23:05 무슨일이 있었나 2011.02.24.avi

다음과 같이 최신 파일이 맨 위에 있는 출력을 어떻게 얻을 수 있습니까?

2011년 2월 27일 23:05 무슨일이 있었나 2011.02.24.avi
2011년 2월 11일 20:06 무슨일이 있었나 2011.02.10.avi
2011년 1월 29일 09:17 무슨일이 있었나 2011.01.27.avi
2011년 1월 23일 10:42 무슨일이 있었나 2007.12.20.avi
2010년 2월 12일 뭔가2010.02.11.avi
2009년 6월 26일 뭔가2009.06.25.avi

답변1

대부분의 단일 머신에는 옵션이 ls있습니다 -t. man내 데비안 상자 페이지 에서 :

-t 수정 시간을 기준으로 정렬

다음 명령을 시도해 보십시오:

$ ls -lt

답변2

정렬하려는 텍스트 파일입니까, 아니면 날짜별로 나열된 디렉토리를 보겠습니까? 후자의 경우,-t플래그를 사용하세요ls. 전자의 경우 특히 -M세 글자의 월 이름 약어를 기준으로 정렬하는 GNU 정렬 플래그를 참조하세요. 다음 명령은 세 번째, 첫 번째, 두 번째 및 네 번째 열을 기준으로 정렬하고 두 번째 정렬 키를 월 이름으로 처리합니다.

sort -k 3 -k 1M -k2 -k4 in.txt

항상 YYYY-MM-DD-HH-MM-SS 순서로(즉, 최상위 우선, 일정한 열 너비) 일본/ISO 스타일 날짜를 사용하는 것이 좋습니다. 날짜순 정렬은 사전 정렬과 동일합니다.

답변3

ls원래 질문을 받았을 때 해당 기능이 명령에 포함되었는지 확실하지 않지만 이제 옵션이 있습니다 --full-time.

예를 들어,

ls -t --full-time 

아래에서 가장 오래된 시간순으로 정렬됩니다. 또는 다음을 사용하는 경우:

ls -tr --full-time

그러면 순서가 반대로 됩니다.

답변4

그러면 모든 파일이 나열됩니다.재귀적으로출력 ls역 정렬통과시간 변경(시간):

find -print0 -type f directory_path | xargs -0 ls -ltr

더 빠르게 검색하려면 다음 명령을 사용하세요.fd

fd -0 -t f directory_path | xargs -0 ls -ltr

관련 정보