名前から日付をtill(Nov1)からto(Dec1)まで取得するファイルを転送するシェルスクリプト

名前から日付をtill(Nov1)からto(Dec1)まで取得するファイルを転送するシェルスクリプト

さて、このシェル スクリプトは複雑に聞こえるかもしれませんが、これを実現する方法がわかりません。

これが要件です。

ここに画像の説明を入力してください

上記のファイルに注意してください。

ファイル名は以下のとおりです。

Meter_20200120100846.xls
Meter_20200121100846.xls
Meter_20200122100846.xls
Meter_20200123100846.xls
Meter_20200124100846.xls
Meter_20200125100846.xls

そこで、これらのファイルを別のサーバーにコピーするスクリプトを作成したいと思います。ただし、最後の数字はそのファイルの日付です。つまり、ファイル 1 の 20200120 は、2020 年 1 月 20 日に作成されたことを意味します。

基本的には、20/01/2020または20200120を入力として受け取るスクリプトを作成したいのです。25/01/2020 または 20200125 に設定し、すべてのファイルを同じ名前の別のサーバーにコピーします。

コマンドで scp、sftp、rsync をコピーするには何でも使用できます。

基本的には、日付から終了日までを取得してすべてのファイルを別のサーバーにコピーするようなスクリプトを作成します。

正直に言うと、それが可能かどうかさえ分かりません。

しかし、もし皆さんがそのような解決策を知ることができれば、それは私にとって本当に助かります。

よろしくお願いいたします。 サガール・マンダル

答え1

私の理解が正しければ:

# Here you set the range of dates
from="20200121" 
to="20200125"
for f in *.xls; do 
  [[ $(date -d "${f:6:8}" +%s) -ge $(date -d "$from" +%s) ]] &&
  [[ $(date -d "${f:6:8}" +%s) -le $(date -d "$to" +%s) ]] &&
  echo "$f in range" || # Here your actions
  echo "$f not in range" 
done

出力:

Meter_20200120100846.xls not in range
Meter_20200121100846.xls in range
Meter_20200122100846.xls in range
Meter_20200123100846.xls in range
Meter_20200124100846.xls in range
Meter_20200125100846.xls in range

答え2

dateコマンドはあなたが探しているものです

$ date -d 1/25/2020 +%Y%m%d
20200125

-d mm/dd/yyyy - 入力日付をコマンドに渡します。

+%Y%m%d - 出力をどのようにしたいか。

  • %Y - 年を4桁で表記
  • %m - 月を2桁で表記
  • %d - 月の日付を 2 桁で表示します。

関連情報