
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は最後の修正時刻を表します。以下は、w
0(日曜日)から6(土曜日)までの曜日を示しています。a
(略語:Mon)または(すべて:Monday)を使用して名前を取得できますが、A
これはロケールによって異なります。:
リテラルを提供します:
。%h/%f
はパスとファイル名です。\0
nullは項目を区切ります(これと同じです-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