Mac の ls コマンドで表示順をソート:
数字を順番通りに並べるには

UB3/informatics/commands_mac/ls_mac_sort

このページの最終更新日: 2023/02/14

  1. 概要: ls の表示順
  2. sort にパイプする
  3. ファイルを数字順に結合する

広告

概要: ls の表示順

このページでは、Mac および Linux の ls コマンドで、ファイルが表示される順番についてまとめる。ls コマンドの概要は ls のページ を参照のこと。

まずは道具作り。次のスクリプトを実行し、「1」と書かれた 1.txt というファイル、「2」と書かれ 2.txt... という順に 100.txt まで作成する。

これらのテキストファイルは、Finder 上ではこのように整然と並ぶ。

しかし、ls の結果はこのようになってしまう。結果を縦に並べる -1 オプションを使っているが、そうでない場合は 6 行 (13.txt まで) 表示されて次の列に移った。

これは非常に見苦しいだけでなく、ls の結果をテキストファイルに保存して while read line に投げるときなどに非常に不便である。これを順番通りに表示するのが v オプションであるが、どうも MacOS Catalina 以降の zsh では使えない模様。

この表示を変更するには、sort コマンドへのパイプがよく使われる。

sort にパイプする

以下の 3 種類のコマンドを試すと、orders1 と orders2 は同じ内容になり、v オプションが働いていないことが確認できる。usage: ls でも、-@ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1% としか表示されない。

3 番目の sort へのパイプ はうまく動き、orders3.txt には 1 から 100 までが数字の小さい順に並ぶ。sort の -n は 文字列を数値とみなして並び替えるオプション である。-n を入れないと、sort しない場合と同じ結果になってしまう。

sort には 他にも多数の便利なオプションがある ので、そのうち整理したい。

ファイルを数字順に結合する

ファイルの結合は cat で行う。

  • combined1.txt の内容は、ls と同じ順番になる。つまり 1, 10, 100, 11, 12... というテキストファイルが出来上がる。したがって、*.txt で認識されるファイル順は、ls と同じ ということがわかる。
  • combined2.txt の内容は、combined1.txt と同じ。sort 後に cat *.txt で元の順番に戻してしまっているということ。
  • combined3.txt では、順番は OK だが、ファイルの内容が 1, 2, 3... ではなく、1.txt, 2.txt, 3.txt... となる。考えてみれば当然で、cat がなくても同じ結果。
  • ちょっと直感に反するが、combined4.txt が期待通りの結果になる。cat コマンドを実行し、並べ替えてから保存するということ。

今後は、同じことを convert を使って画像ファイルでできるかどうか、001, 002... などのゼロ埋めした番号を使う方法などを更新予定。


広告

References

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。