약 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
ls
Shell globs는 기본적으로 이름별로 파일 목록을 사전순으로 정렬합니다.
GNU 구현 에는 옵션이 ls
있습니다-v
버전sort가 여기에서 도움이 될 것이지만 ls
macos에는 이에 상응하는 것이 없습니다( -v
다른 용도로 사용됩니다(축어적으로)).
GNU 구현에는 옵션 도 sort
있습니다-V
버전유형. macos는 sort
그것을 복사했습니다(BSD는 sort
GNU였기 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를 ""
.