さて、このシェル スクリプトは複雑に聞こえるかもしれませんが、これを実現する方法がわかりません。
これが要件です。
上記のファイルに注意してください。
ファイル名は以下のとおりです。
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 桁で表示します。