約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を""
。