実際、毎月金曜日に2012年に作成されたファイルとフォルダーを検索する必要があります。
find
コマンドを使用していくつかの試みをしましたが、機能しませんでした。
find
を使用する最も簡単な方法は次のとおりです。
_find / -daystart -mtime +41 -mtime -408 \
-printf "%M %n %u %g %10s %TY-%Tm-%Td %Ta %TH:%TM:%TS %h/%f\n" |
awk '($7=="Fri"){print}'
_
必要に応じて_-printf
_を調整します。ここでは、_ls -l
_に近くなるようにしています。 _%T
_(および_%A
_ _%C
_)を使用すると、タイムスタンプにstrftime()
形式を使用できます。_%Ta
_は曜日です。 (41〜408日の範囲を調整する必要があるかもしれませんが、これは実際には単なる最適化です。_grep 2012
_を調整するか、_-printf
_を調整してgrepを簡単にすることができます。)
編集:より堅牢なバージョンですが、明確さが少し失われています:
_find / -daystart -mtime +41 -mtime -408 \
-printf "%M %n %u %g %10s %TY-%Tm-%Td %Ta %TH:%TM:%TS\0%h/%f\0\0" |
gawk 'BEGIN{RS="\0\0"; FS="[\0]"} ($1~/ Fri /) { printf $2 "\0"}' |
xargs -0 -n 1 -i ls -l "{}"
_
これは_-print0
_をエミュレートしますが、各行には2つの_\0
_区切りフィールドがあり、ファイル名は2番目です。最後の_ls -l "{}"
_を、ファイルに対して行う必要のあるものに置き換えます。私は明示的にgawk
を使用していますが、他のawkはRS
/FS
の\ 0バイトにそれほど親切ではありません(ファイル名の改行も処理するように更新されています)。
また、mreithubで提案されているように、_%Tu
_と同様に、または_%Ta
_の代わりに番号付きの平日に使用できます。言語に依存しないオプション。
gnu
ツールを使用する場合:
find . -exec bash -c '[[ $(date -r "$0" +%u%Y) = "52012" ]]' {} \; -print
ファイル/ディレクトリ名は、前の-print
が返された場合にのみ-exec
されますtrue、つまり、date -r
によって報告されたmtime
が指定された形式(%u%Y
)は52012
です
または、zsh
のみのソリューションを好む場合(非常によく似ていますが、e
-文字列は、引用符内の式が返すファイル/ディレクトリのみを選択しますtrue =):
zmodload zsh/stat
print -rl -- **/*(De_'[[ $(zstat -F "%u%Y" +mtime -- $REPLY) = "52012" ]]'_)