特定の日付(たとえば月曜日)に最後に変更されたすべてのファイルを見つけますか?

特定の日付(たとえば月曜日)に最後に変更されたすべてのファイルを見つけますか?

findだから私はそれを使用して、月曜日に最後に変更された特定のディレクトリのすべての.htmlファイルのリストを返したいと思います。どうすればいいですか?

答え1

onlyまたは同様のものを使用してこれを直接find実行する良い方法はわかりませんが、次のfindことを使用できますgrep

find -printf '%Tw:%h/%f\0' | grep -z '^1:'

そのため、findもちろん他のフラグを組み合わせることもできます。

find -name '*.html' -type f -printf '%Tw:%h/%f\0' | grep -z '^1:'

.htmlで終わるファイルのみをインポートします。

説明する

これは私のテストディレクトリです。

$ ls -la
total 68
drwxr-xr-x  2 anthony anthony  4096 Mar 24 17:53 .
drwxrwxrwt 98 root    root    61440 Mar 24 17:55 ..
-rw-r--r--  1 anthony anthony     0 Mar 24 17:53 monday
-rw-r--r--  1 anthony anthony     0 Mar 23 11:12 sunday

find引数は-printfフォーマット文字列を使用します。ここで、%Tは最後の修正時刻を表します。以下は、w0(日曜日)から6(土曜日)までの曜日を示しています。a(略語:Mon)または(すべて:Monday)を使用して名前を取得できますが、Aこれはロケールによって異なります。:リテラルを提供します:%h/%fはパスとファイル名です。\0nullは項目を区切ります(これと同じです-print0)。

これは次の内容を印刷します1:./.<NULL>0:./sunday<NULL>1:./monday<NULL>。読みやすくするために、NULLを改行文字に置き換えると、次のようになりますtr '\0' '\n'

1:./.
0:./sunday
1:./monday

次に、grep -z '^1:'1:(月曜日)で始まる項目を見つけます。

答え2

カスタムls形式で日付を出力できます。

ls --time-style=+%A *.html | grep " Monday "

「月曜日」がファイル名にないとします。

答え3

あなたの質問は疑わしいですが、答えは次のとおりです。

find ./ -type f -name '*.html' -printf "%Ta %p\n" | grep '^Mon' | sed 's:^Mon ::'

.htmlサーバーに設定されている現在の時間帯に基づいて、人類の歴史で月曜日に最後に変更されたもので終わるすべてのファイルを見つけます。

答え4

find次のようにwithを使用すると、stat月曜日の修正タイムスタンプを持つすべてのファイルを見つけることができます。

find . -type f -exec stat -t %a  {} \; | awk 'match($10, /"Mon"/) {print $16}'

このfindコマンドは、すべてのファイルを検索してawkフィルタに渡す前にカウントを計算します。awkフィールド番号10(つまり、ファイル変更時間)と"Mon"月曜日に変更されたファイルを抽出する文字列を一致させます。このprint $16文はファイル名を出力します。削除して$16すべてのフィールドを印刷したり、任意の数字を使用して選択したフィールドを印刷したりできます。

パート1の出力例(OS X):

$ cd /usr ; find . -type file -exec stat -t %a  {} \;

16777218 20556154 -rwxr-xr-x 1ルートチャクラ0 19600 "月曜日" "木曜日" "木曜日" "土曜日" 4096 16 0x20 ./bin/du

16777218 20547205 -rwxr-xr-x 1 ルートチャクラ 0 14256 "水曜日" "木曜日" "木曜日" "水曜日" 4096 16 0x20 ./bin/dwarfdump

16777218 20586248 -rwxr-xr-x 2ルートチャクラ0 925「金曜日」「木曜日」「木曜日」「日曜日」4096 0 0x20 ./bin/easy_install

関連情報