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.php
ls
/
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||'
答え2
はい、可能です。
これにより、過去60分間に変更されたファイルが提供されます。
$ find /domain -type f -mmin -60
または、変更時間でソートされたファイルを提供します。
$ find /domain -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r
編集#1
ファイル拡張子が「.php」の場合は、以下を追加してください。
-name '*.php'
私が見つけたこれ確認してみるとよさそうです。
編集#2
まあ、最後の編集で状況が少し難しくなりました。ただし、最後に変更されたディレクトリを使用できますls -t
。時間で並べ替えるには、ls -clRt
それを使用してファイルを確認できますが、特定のコマンドを使用して何をしたいのかわかりません。同様のスクリプト(BashまたはPerl)を使用して可能です。
答え3
答え4
そしてzsh
:
setopt extendedglob
print -rl -- **/file.php(.om:h)
.om
選択したファイルを並べmtime
替え、:h
末尾のパス部分を削除します。 sも
リストするには、mtime
次のものを使用できます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}