mymid_LSスクリプトがあります。
#!/bin/sh
ls -pt
すべてのファイルとディレクトリ(非表示)を一覧表示し、変更時間で並べ替える必要があります。
スクリプトを実行可能にしました。
chmod 755 my_midLS
私は3つのディレクトリと2つのファイルを作成しました。
$>mkdir dir00 dir01 dir02
$>touch file00 file01
ファイルは次の順序で表示する必要があります。
$>./my_midLS
file01 file00 dir02/ dir01/ dir00/ my_midLS
ただし、次の順序で表示されます。
file00 file01 dir00/ dir01/ dir02/ my_midLS
唯一の問題は、ファイルとディレクトリが反対側に表示されることです。
表示されるファイルとディレクトリの順序をどのように変更できますか?
答え1
sh
短いスクリプトをzsh
スクリプトに変換する場合は、zsh
必要な順序で名前をソートするようにシェルに要求できます。
#!/bin/zsh
ls -p -fd -- *(om)
これには、(om)
前のパターンの動作を変更するグローバル修飾子があります。 om
「最後の修正時間に基づいてソート」を意味します。次に、変更の順序を停止し、ディレクトリの内容をリストしないls -fd
この名前のリストを使用して呼び出します。-f
ls
-d
ls
コマンドに加えて、以下を使用できます。
print -rC1 -- *(Nom)
-C1
リストを単一の列()で印刷します。バックスラッシュシーケンスの解析を停止します-r
。 in glob修飾子はprint
inのように動作します。つまり、一致するものがない場合(エラーを生成する代わりに)、パターンは空の状態に拡張されます。N
nullglob
bash
答え2
これがLinuxシステムにある場合、Linuxカーネルのバグの犠牲者です。
UNIXでは、ファイルタイムスタンプがuniquetime()
使用されるたびに1秒ずつ増加する関数を使用して生成されます。
システムクロックが非常に細かくない場合でも、さまざまなファイルシステム操作に固有のファイルタイムスタンプが与えられます。
ただし、Linuxでは、複数のファイルシステム操作に対して同じタイムスタンプを取得するのが一般的なようです。
タイムスタンプが同じ場合、ファイルはアルファベット順にソートされます。