${filename}.${date}
たとえばfile.20111101
、file.20120703
今日November 1, 2011
まで名前がで構成されているファイルのリストを生成したいのですが、週末は除外する必要があります。
ありがとう。
${filename}.${date}
たとえばfile.20111101
、file.20120703
今日November 1, 2011
まで名前がで構成されているファイルのリストを生成したいのですが、週末は除外する必要があります。
ありがとう。
2011年にこれを試してみてください
for y in 2011; do
for m in {1..12}; do
for d in `cal -m $m $y|tail -n +3|cut -c 1-15`; do
printf "file.%04d%02d%02d\n" $y $m $d;
done;
done;
done
またはこれは2011年11月から2013年12月まで
for ym in {2011' '{11,12},{2012..2013}' '{1..12}}; do
read y m <<<$ym;
for d in `cal -m $m $y|tail -n +3|cut -c 1-15`; do
printf "file.%04d%02d%02d\n" $y $m $d;
done;
done
または今月末まで「ハード」
for ym in {2011' '{11,12},2012' '{1..7}};do
read y m <<<$ym;
for d in `cal -m $m $y|tail -n +3|cut -c 1-15`;do
printf "file.%04d%02d%02d\n" $y $m $d;
done;
done
これはあなたのために働くかもしれません(GNU日付、sedとBash):
seq 0 $((($(date +%s)-$(date -d 20111101 +%s))/86400)) |
sed '5~7d;6~7d' |
xargs -l1 -I '{}' date -d '+{} days 20111101' +file.%Y%m%d
説明:
seq
20111101
からまでの一連の日数を提供しますtoday
sed
週末を除外しますxargs
コマンドの日パラメータをフィードしますdate
。もう1つのオプションは、 (http://www.fresse.org/dateutils/#dateseqdateseq
)から使用することです。dateutils
$ dateseq 2017-03-25 $(date +%F) --skip sat,sun -ffile.%Y%m%d
file.20170327
file.20170328
file.20170329
file.20170330
file.20170331
file.20170403
file.20170404
file.20170405
file.20170406
file.20170407
gawkを使用したソリューション:
gawk -v START_DATE="2011 11 01 0 0 0" -v FILE="file" '
BEGIN {
END_DATE = strftime( "%Y %m %d 0 0 0", systime() )
while ( START_DATE <= END_DATE ) {
split( START_DATE, DATE )
if ( strftime( "%u", mktime( START_DATE ) ) < 6 ) print FILE "." DATE[ 1 ] DATE[ 2 ] DATE[ 3 ]
START_DATE = strftime( "%Y %m %d 0 0 0", mktime( DATE[ 1 ] " " DATE[ 2 ] " " ( DATE[ 3 ]+1 ) " 0 0 0" ) )
}
}
'
これは、日付コンポーネントの1つをインクリメントすると、正しい日付を自動的に見つけるmktimeの優れたプロパティを使用します(たとえば、「2012-02-33」は「2012-03-04」になります)。