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)
Vivianが提案したように、ls
の-t
オプションは、変更時刻でファイルをソートするように指示します(デフォルトでは、最新のものが最初です。-r
を追加すると逆になります)。これは(少なくとも私の経験では)ディレクトリ内のファイルを並べ替えるために最も一般的に使用されますが、コマンドラインのファイルのリストに適用することもできます。また、ワイルドカード(「グロブ」)は、コマンドラインでファイルのリストを生成します。だから、あなたが言うなら
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||'
これは、sed
の通常のs/old_string/replacement_string/
置換ですが、|
にold_string
が含まれているため、区切り文字として/
を使用します。 、および空のreplacement_string
。 (つまり、ファイル名とその前の/
— /file.php
—をls
出力から削除します。)もちろん、ディレクトリの末尾に/
が必要な場合は名前は、sed 's|file.php||'
またはsed 's/file.php//'
を実行してください。
必要に応じて、-l
(小文字のL)オプションをls
に追加して、変更日時を含む長いリストを取得します。次に、sed
コマンドを拡張して、関係のない情報(モード、所有者、ファイルのサイズなど)を取り除き、必要に応じて、ディレクトリ名の後に日付/時刻を移動することもできます。
これにより、現在のディレクトリinであるディレクトリが調べられ、それらだけが調べられます。 (これは質問が求めているもののようです。)他のディレクトリの1レベルのスキャンを実行することは、些細なバリエーションです。
ls -t /path/to/tld/*/file.php | sed 's|/file.php||'
現在のディレクトリ(または他の最上位ディレクトリ)の下にあるディレクトリツリー全体を(再帰的に)検索するには、少し注意が必要です。コマンドを入力します
shopt -s globstar
次に、上記のコマンドの1つにあるアスタリスク(*
)を2つのアスタリスク(**
)に置き換えます。例:
ls -t **/file.php | sed 's|/file.php||'
はい、それはかなり可能です。
これにより、過去60分間に変更されたファイルが提供されます。
$ find /domain -type f -mmin -60
または、これにより、変更時間でソートされたファイルが提供されます。
$ find /domain -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r
'.php'と言ったようなファイル拡張子がある場合は、次を追加します。
-name '*.php'
そして私は見つけました this あなたはそれを見たいかもしれません。
さて、あなたの最後の編集は物事を難しくします。ただし、ls -t
を使用して最後に変更されたディレクトリを指定できます。また、時間ls -clRt
で並べ替える場合は、それを使用できます。その後、ファイルを確認できますが、どのファイルでも何が可能かわかりません。特定のコマンド。同様のスクリプト(BashまたはPerl)で可能です。
zsh
の場合:
setopt extendedglob
print -rl -- **/file.php(.om:h)
.om
は選択したファイルをmtime
でソートし、:h
は末尾のパスコンポーネントを削除します。mtime
sもリストしたい場合は、zstat
を使用できます。
zmodload zsh/stat
for f (**/file.php(.om))
printf '%s %s\t%s\n' $(zstat -F '%d-%b-%Y %T' +mtime -- $f) ${f:h}