日付が11月1日から12月1日までのファイルを転送するシェルスクリプト

日付が11月1日から12月1日までのファイルを転送するシェルスクリプト

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

だからそれは要件です。

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

上記の文書を参照してください。

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

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として受け入れるこのようなスクリプトを作成したいと思います。到着2020年1月25日または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桁の日付。

関連情報