曜日に基づいてファイルを検索する方法

曜日に基づいてファイルを検索する方法

実際、毎月金曜日に2012年に作成されたファイルとフォルダを検索する必要があります。

このコマンドを使用していくつかの試みをしましたが、find成功しませんでした。

答え1

最も簡単な方法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使用できます。 (日付範囲を41〜408に調整する必要があるかもしれませんが、実際には単に最適化するか、より簡単に把握するために調整できます。)strftime()%Tagrep 2012-printf

編集する:より強力なバージョンですが、明確さはわずかに減少しました。

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 "{}"末尾をファイルに関して必要なものに置き換えます。私は明示的にを使用していますが、他のawksは/の\ 0バイトをそのようにgawk親切に処理しません(ファイル名の改行文字を処理するように更新されました)。RSFS

しかも提案によるとmretub%Tu言語独立オプションを使用する%Taか、番号付きの平日を置き換えることができます。

答え2

ツールを使用してくださいgnu

find . -exec bash -c '[[ $(date -r "$0" +%u%Y) = "52012" ]]' {} \; -print

-printファイル/ディレクトリ名は、古い名前が返された-exec場合にのみ編集されます。本物つまり、mtime指定された形式()によるレポートdate -r%u%Y52012

zshあるいは、-onlyソリューションを好む場合(非常に似ています、-stringはe引用符内の式から返されたファイル/ディレクトリのみを選択します)本物):

zmodload zsh/stat
print -rl -- **/*(De_'[[ $(zstat -F "%u%Y" +mtime -- $REPLY) = "52012" ]]'_)

関連情報