2017-11-18 9 views
0

次のことを達成するために、Bashでいくつかのコード行をどうやってやりますか?私はBashで自分のスキルを磨き、コマンドラインから小さなタスクディレクトリを処理する方法を学びます。日付範囲に基づくファイルのセットを作成する

ステップ:

  1. 開始日と終了日を指定します。開始日と終了日を含めてすべての日付を「リスト」に含めます。

  2. 毎回このようにファイルを作成するリストをループします。 は、あなたは終了日を過ぎているまで、一日あたりの秒数とtouch結果にちなんで名付けられたファイルを追加し、Unixのタイムスタンプに入力日付を変換することができ

    2017-11-10.w 
    2017-11-11.w 
    2017-11-12.w 
    
+0

バッシュは日付を管理するためのその偉大ではありません。私は、bashよりもPerlや他の "先進的な"言語でやっています。私の2セント。何を試してみましたか、どのような研究ですか? – Nic3500

答えて

1

(日付フォーマットが必要):

#!/bin/bash 

startstamp=$(date -d "$1" +'%s') 
endstamp=$(date -d "$2" +'%s') 

secs_per_day=$((24 * 3600)) 

for ((thedate = startstamp; thedate <= endstamp; thedate += secs_per_day)); do 
    touch "$(date -d "@$thedate" '+%F.w')" 
done 

%sフォーマット文字列(GNU拡張)はUnixエポックからの秒数を出力し、-dオプションの引数で@は日付が目であることを示し、フォーマットで。 %Fは、%Y-%m-%dの略で、YYYY-MM-DDに変換されます。

使用例:

$ ./dates 2017-11-10 2017-11-15 
$ ls -1 
2017-11-10.w 
2017-11-11.w 
2017-11-12.w 
2017-11-13.w 
2017-11-14.w 
2017-11-15.w 
dates 
関連する問題