実際、毎月金曜日に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()
%Ta
grep 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
親切に処理しません(ファイル名の改行文字を処理するように更新されました)。RS
FS
しかも提案によるとmretub%Tu
言語独立オプションを使用する%Ta
か、番号付きの平日を置き換えることができます。
答え2
ツールを使用してくださいgnu
:
find . -exec bash -c '[[ $(date -r "$0" +%u%Y) = "52012" ]]' {} \; -print
-print
ファイル/ディレクトリ名は、古い名前が返された-exec
場合にのみ編集されます。本物つまり、mtime
指定された形式()によるレポートdate -r
%u%Y
52012
zsh
あるいは、-onlyソリューションを好む場合(非常に似ています、-stringはe
引用符内の式から返されたファイル/ディレクトリのみを選択します)本物):
zmodload zsh/stat
print -rl -- **/*(De_'[[ $(zstat -F "%u%Y" +mtime -- $REPLY) = "52012" ]]'_)