ls cmdは、必要な順序でファイルとディレクトリを表示しません。

ls cmdは、必要な順序でファイルとディレクトリを表示しません。

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この名前のリストを使用して呼び出します。-fls-d

lsコマンドに加えて、以下を使用できます。

print -rC1 -- *(Nom)

-C1リストを単一の列()で印刷します。バックスラッシュシーケンスの解析を停止します-r。 in glob修飾子はprintinのように動作します。つまり、一致するものがない場合(エラーを生成する代わりに)、パターンは空の状態に拡張されます。Nnullglobbash

答え2

これがLinuxシステムにある場合、Linuxカーネルのバグの犠牲者です。

UNIXでは、ファイルタイムスタンプがuniquetime()使用されるたびに1秒ずつ増加する関数を使用して生成されます。

システムクロックが非常に細かくない場合でも、さまざまなファイルシステム操作に固有のファイルタイムスタンプが与えられます。

ただし、Linuxでは、複数のファイルシステム操作に対して同じタイムスタンプを取得するのが一般的なようです。

タイムスタンプが同じ場合、ファイルはアルファベット順にソートされます。

関連情報