同じ名前のインクルードファイルの最後の変更日時に基づいてディレクトリを並べ替える

同じ名前のインクルードファイルの最後の変更日時に基づいてディレクトリを並べ替える

grepなどを使用して、find同じ名前(たとえば)を持つファイルの最後の変更日に基づいてディレクトリfile.phpリストをソートできますか?たとえば、

domain1/file.php (last modified 20-Jan-2014 00:00)
domain2/file.php (last modified 22-Jan-2014 00:00)
domain3/file.php (last modified 24-Jan-2014 00:00)
domain4/file.php (last modified 23-Jan-2014 00:00)

各ディレクトリには同じファイル名があります(例file.php:)。

結果は次のとおりです。

domain3/ (last modified 24-Jan-2014 00:00)
domain4/ (last modified 23-Jan-2014 00:00)
domain2/ (last modified 22-Jan-2014 00:00)
domain1/ (last modified 21-Jan-2014 00:00)

ベストアンサー1

Vivianが提案したように、-tオプションはls変更時間に基づいてファイルをソートするように指示します(デフォルトでは、最新のエントリが最初に追加された場合はその逆-r)。これは(少なくとも私の経験では)ディレクトリ内のファイルをソートするために最も一般的に使用されますが、コマンドラインのファイルリストにも適用できます。ワイルドカード(「glob」)はコマンドラインにファイルのリストを生成します。だからあなたが言うなら

ls -t */file.php

それはリストされています

domain3/file.php  domain4/file.php  domain2/file.php  domain1/file.php

ただし、-1(ダッシュ 1) オプションを追加したり別の項目にリンクしたりすると、1 行に 1 つずつ表示されます.だからあなたが望むコマンドは

ls -t */file.php | sed 's|/file.php||'

これは一般的な代替品ですが、区切り文字として使用されます。s/old_string/replacement_string/sed|old_string/空のaが含まれています。replacement_string。 (つまり、出力からファイル名と/その前にあるものを削除します)/file.phpls/sed 's|file.php||'sed 's/file.php//'

必要に応じて-l(小文字のL)オプションを追加して、ls 変更日時を含む長いリストを取得します。その後、sed無関係な情報(ファイルモード、所有者、サイズなど)を削除し、必要に応じて日付/時刻をディレクトリ名に戻すようにコマンドを拡張できます。

これにより、次のディレクトリが表示されます。存在する現在のディレクトリ、そしてそのディレクトリだけ。 (これは質問が要求するようです。)他のディレクトリの単一レベルの検索はマイナーな変更です。

ls -t /path/to/tld/*/file.php | sed 's|/file.php||'

現在のディレクトリ(または他の最上位ディレクトリ)の下にあるディレクトリツリー全体を(再帰的に)検索するのは少し面倒です。コマンドを入力する

shopt -s globstar

次に、*上記のコマンドのいずれかでアスタリスク()を2つのアスタリスク(**)に置き換えます。たとえば、次のようになります。

ls -t **/file.php | sed 's|/file.php||'

おすすめ記事