한 번은 날짜별로, 또 한 번은 해당 날짜 내 파일 이름의 일부를 기준으로 두 번 정렬해야 하는 300개 이상의 파일이 있습니다.
이름의 유일한 기준은 로 끝나는 것입니다 *mmddyyyy<time stamp>.csv
. 여기서 파일 이름의 첫 번째 부분에는 무엇이든 포함될 수 있습니다. 날짜 정렬 기능이 있다는 것을 알고 있지만 ls -ltr
마지막 키 정의의 일부를 캡처하고 정렬할 수 없는 것 같습니다.
답변1
파일 이름이 끝에서 볼 때 예측 가능한 형식(확장자, 시간, 날짜)을 갖는다는 점을 고려하면 이 사실을 활용하고 다음 명령을 사용할 수 있습니다.
ls -1 | rev | sort -t '~' -k1.14,1.14 -k1.13,1.13 -k1.12,1.12 -k1.11,1.11 -k1.18,1.18 -k1.17,1.17 -k1.16,1.16 -k1.15,1.15 | rev
설명:
- 필요한 형식에 액세스할 수 있도록 파일 이름이 먼저 반전됩니다.
- 그런 다음 결과는 필요에 따라 문자별로 정렬됩니다.
- - 문자 11~14는 연도입니다(역순)
- - 문자 17~18 월(역순)
- - 15~16 문자는 일(역순)
- 마지막으로 또 다른 반전이 발생하여 원래 이름으로 표시됩니다.
전체 파일 이름을 하나의 필드에 결합하기 위해 구분 기호로 물결표를 사용했지만 ~
다른 구분 기호를 사용하거나(파일 이름에 절대 표시되지 않는 문자여야 함) .
파일 이름을 결합하기 위해 (점) 만 사용할 수 있습니다. 두 번째 질문에 대해 정렬할 다른 부분을 지정할 수 있도록 여러 필드로 분할됩니다(해당 번호가 항상 동일한 경우).