Macファイルの更新時刻順に並べ替えたいことは結構あると思うのだが、フォルダを下って再帰的に行う場合はどうすればいいのだろうか?まあWindowsのExplorerやMacのFinderだと、フォルダを全て開いて変更日の列をクリックとかすればいいかも。ファイルの数が多いとフォルダを開くのは大変かも?ではFreeBSDやLinuxのCUIなシェルの場合はどうするか?lsコマンドには-tオプションがあり、ファイルの更新時刻の新しい順で並べ替えてくれる。ディレクトリを再帰的に下る-Rオプションと併用しても、同じディレクトリ内しか並べ替えてくれない。下記のような状態のファイルとディレクトリ構成の場合で実験。file8最初の思いつき(だがダメな場合も)最初に思いついたのは、下記のようにxargsを使ってfindとlsの連携。DIR/dir2/file7これは、ディレクトリとファイルが少ない時だけ有効。ディレクトリとファイルが大量にあるとダメなのだ。xargsの動きを思い出すと、シェルの引数の長さの制限いっぱい毎にコマンドを複数回実行している。仮にファイルの引数制限が1000個だとすると、下記のようなコマンドが実行されている。file3000つまり1000個ずつで更新時間の並べ替えが行われており、全体としての並べ替えにはなっていない。するの?じゃあファイル更新時刻の文字列情報を使って、sortコマンドで並べ替えてやればいいかも?しかしlsコマンドの-lオプションで更新時刻を表示は意外と厄介。file38列目の表示が困ったちゃんで、更新時刻が1年より新しいと時分、古いと年を表示する。6列目と7列目も2桁表示してくれない。sortコマンドで扱いにくい。いうことで、更新時刻表示を固定長で表示する方法があればいいのでは?FreeBSD最近のFreeBSDでは、lsコマンドの-Dオプションで、更新時刻の出力フォーマットが指定できる。いうことで下記のシェル芸でオケ。DIR/dir1/file4LinuxLinuxというかGNUのlsコマンドだと--time-styleオプションを使うことでdateコマンドと同様なフォーマット指定が可能。いうことで下記のシェル芸でオケ。DIR/dir1/file4また--full-timeオプションだと下記のような固定長で日付と時刻表示可能。いうことで下記でもオケ。DIR/dir1/file4MacMacのコマンドはBSD系だからFreeBSDと同じで出来るかも?と思ったが、lsコマンドに-Dオプションが使えなかった。coreutilsを入れ、GNUのlsコマンドglsを使ってLinuxと同じシェル芸でオケ。はてなブログPro情報処理ってもっとシンプルにならないだろうか?PKI関連、RubyやPHP等のLL、シェルスクリプト、シェル芸、ユニケージ見習い未満。シェルスクリプトとシェル芸はきっと違うんですよ。JPはてなブログをはじめよう!papiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。