Finder와 동일한 순서로 터미널에서 파일 목록 가져오기

Finder와 동일한 순서로 터미널에서 파일 목록 가져오기

약 1,000개의 이미지 파일이 들어 있는 폴더가 있습니다. 그 목록을 만들어야 해요. 터미널에 가서 폴더에 CD를 넣으면 입력만 하면 된다는 내용을 어딘가에서 읽었습니다.

ls > 목록.csv

목록을 생성합니다. 문제는 이 목록이 Finder에 표시되는 파일과 순서가 다르다는 것입니다. 예를 들어 Finder에서 첫 번째 이미지는 16_left.jpg입니다. 그러나 생성된 list.csv 파일의 첫 번째 이미지는 10017_left.jpg이고 16_left.jpg는 항상 15975_right.jpg와 16007_right.jpg 사이에 위치합니다.

Finder에서는 숫자 16을 파일에서 가장 작은 숫자로 간주하여 맨 위에 배치하는 반면 list.csv 파일은 정수 자체가 아니라 왼쪽에서 오른쪽으로 각 숫자 쌍으로 표시되는 것을 볼 수 있습니다. 목록이 정렬됩니다.

Finder와 같은 순서로 list.csv를 만들려면 어떻게 해야 하나요?

답변1

lsShell globs는 기본적으로 이름별로 파일 목록을 사전순으로 정렬합니다.

GNU 구현 에는 옵션이 ls있습니다-v버전sort가 여기에서 도움이 될 것이지만 lsmacos에는 이에 상응하는 것이 없습니다( -v다른 용도로 사용됩니다(축어적으로)).

GNU 구현에는 옵션 도 sort있습니다-V버전유형. macos는 sort그것을 복사했습니다(BSD는 sortGNU였기 sort때문에 이를 다시 작성한 사람은 API를 유지했습니다).

따라서 현재 작업 디렉토리의 모든 파일 이름에 개행 문자가 없는 경우입니다.

ls | sort -V

숫자 순서를 알려줄 것입니다.

zsh 셸에서는 기본적으로 숫자로 정렬하기 위해 glob 확장에 이 numericglobsort옵션( 활성화 사용 )을 사용할 수 있습니다. 또는 glob 한정자를 사용하여 glob별로 해당 순서를 set -o numericglobsort선택할 수 있습니다 .n

print -rC1 -- *.jpg(Nn)

( N여기서 ullglob 한정자가 사용되므로 일치하는 항목이 없어도 불평하지 않습니다.) 이름이 olumn 으로 끝나는 숨김되지 않은 파일 print r에 대해서는 숫자순으로 정렬됩니다.1 C.jpg

그러나 목록을 csv 형식으로 얻으려면 다음과 같은 것이 필요합니다.

(){ print -rC1 -- \"${^argv//\"/\"\"}\"; } *.jpg(Nn)

즉, 파일 이름을 따옴표로 묶고 "파일 이름의 s를 "".

관련 정보