linuxサーバーAのあるディレクトリから、別のlinuxサーバーBのあるディレクトリに、サーバーA内に一定間隔で入ってくるデータファイルを一定間隔でコピーし続けたいと思っています。
サーバーAには、一日中毎に観測データファイル(20230826.rawなど)が作成され、30秒毎にその日のファイル内のデータが一行ずつ追記されていきます。このファイルを、1分間隔でAからBにコピーし続けたいです。同じ日付であれば、中身だけ増えていくので、同じファイルのものは上書きなどの処理にしたいです。
また、その際に、サーバーAのデータをそのままコピーするのではなく、以下2点の変換をしたものをBにコピーしたいです。
①データの形式を.rawから.datに変換
②データの中には含まれる+を+0に変換
何か良い方法をご存知でしたらおしえていただけると嬉しいです。
No.2ベストアンサー
- 回答日時:
ご質問が漠然としているため多くの回答者は何を答えて良いやら判断が難しいと思います。
もう少し絞って限定した質問をいただければ回答も付きやすいと思います。「一定時間毎に特定の処理をしたい。」とのことですが、これにはLinuxに備わるcron機能、あるいはシェルスクリプトファイルの中でsleepコマンドを用いた無限ループを実行することができると思います。
どちらも専用のシェルスクリプトファイルを作成して使用することになると思います。cronは予め実行開始時間、実行間隔、実行機能を登録しておくことで、パソコンがbootを完了した直後から勝手に機能が有効になります。Windowsのサービス機能と少し似ています。。
一方のsleepコマンドを使ったシェルスクリプトファイルの実行は、ユーザがパソコンにログインした後当該スクリプトを起動することで処理が開始されることになります。
ご質問にある『一分毎...』の時間を守ることが重要ならcron機能のほうが優れていると思われますが、一方ファイルコピー及び変換が一分間で間に合わない事態が生じると、負荷が急激に大きくなりトラブルの元になるかもしれません。
以下は10秒毎にechoコマンドを実行するスクリプトの例です。
#!/bin/csh -f
# File name: test
# Infinite loop
Label_1:
echo "Hello World"
sleep 10 # 10(sec)
goto Label_1
1.ファイルコピー
ご質問には何らご説明がありませんが、相手のパソコンのファイルシステムをnfsマウントしてあるのなら、前述のスクリプトに"cp"コマンドで繰り返しコピーすることができるでしょう。
nfsマウントしていないのなら"sftp"コマンドで"get"あるいは"put"することでファイルをコピーすることができます。但し"sftp"コマンドの利用には更にひと手間かける必要があるでしょう。
2.ファイル名の生成
固定したディレクトリにご質問のようなファイルが生成されるなら、スクリプトの中で次のようにファイル名を生成できます。
#!/bin/csh -f
# File name: test (Infinite loop)
Label_1:
set Name = `date '+%Y%m%d%H%M%S'`
set Ifile = "$Name.raw"
set Ofile = "$Name.dat"
echo "InputFile = $Ifile, OutputFile = $Ofile"
sleep 10 # 10(sec)
goto Label_1
これを実行すれば次の出力が得られます...
$ ./test
InputFile = 20230823140256.raw, OutputFile = 20230823140256.dat
InputFile = 20230823140306.raw, OutputFile = 20230823140306.dat
InputFile = 20230823140316.raw, OutputFile = 20230823140316.dat
InputFile = 20230823140326.raw, OutputFile = 20230823140326.dat
ちゃんと10秒毎に実行されているのが判ります。
3.データの形式を.rawから.datに変換
これは全く意味が判りません。何かのバイナリファイルをテキストデータに変換する、の様にとれますがご質問の中に説明がありません。
●ソフトウエアをバッチ処理で使う
ご質問者様が既に変換ソフトをお持ちでバッチ処理で利用できるものなら、単純にスクリプトにそれを記述するだけです。ここではソフト名を"Conv"だとすれば...
#!/bin/csh -f
# File name: test (Infinite loop)
Label_1:
set Name = `date '+%Y%m%d%H%M%S'`
set Ifile = "$Name.raw"
set Ofile = "$Name.dat"
Conv $Ifile $Ofile
sleep 10 # 10(sec)
goto Label_1
で良いことになります。
●ソフトウエアを作る
シェルスクリプトでの作成は難しいでしょう。C言語などでの作成が必要になりますが、バイナリファイルのフォーマットが既知でなければ、そもそもそれもできないことになります。何らかの方法で"Conv"変換プログラムを作成できたら、上で説明した方法でスクリプトに組み込むことができます。
4.テキストファイルの文字列変換
上記スクリプトファイルに"sed"コマンドなどを追加することでテキストファイルの文字列変換は簡単にできます。
早速お返事いただきありがとうございました!お礼が遅くなり申し訳ございません。
教えていただいたことを参考にしてみたところ、希望どおりの操作ができました。
No.1
- 回答日時:
一般的には cron+rsync 等を使えばよいのですが
https://ja.wikipedia.org/wiki/Crontab
https://ja.wikipedia.org/wiki/Rsync
ご提示の様な変換を咬ませるとなると、
素直にそれなりのスクリプトを bash や python で組むのが一番簡単かと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) テキストデータ変換(プログラミング、linux、python) 8 2023/08/08 16:39
- iOS iPhone用動画保存アプリiCapのデータは外付けUSBメモリに保存できますか? 1 2022/10/18 17:48
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- その他(Microsoft Office) VBAで横データを縦データに変換する方法を教えて下さい。 4 2023/06/25 21:12
- システム 合計5GBのサイトを構成するデータファイルの集まり(ディレクトリ)があります。サーバーからローカルへ 2 2022/07/12 14:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
C言語について。
C言語・C++・C#
-
Javaって使いますか、もう古いですか?C++とどっちがいいですか?分析でC++使う授業ありましたけ
C言語・C++・C#
-
C言語について。
C言語・C++・C#
-
-
4
C言語について。
C言語・C++・C#
-
5
コマンドプロンプトについて。
C言語・C++・C#
-
6
C言語 バッファについて。
C言語・C++・C#
-
7
ストリーム 意味について。
C言語・C++・C#
-
8
C言語です
C言語・C++・C#
-
9
写真のプログラムは、1からnまでの、全整数の積すなわち階乗値を求めて返却する関数を作成したいのですが
C言語・C++・C#
-
10
ストリームについて。
C言語・C++・C#
-
11
C言語関数違いについて。
C言語・C++・C#
-
12
C言語 バッファについて。
C言語・C++・C#
-
13
AWSでサーバを構築してWordpressをインストールしたいのですが、SSH接続でどうしても失敗し
UNIX・Linux
-
14
生命情報工学 二分探索木 Insert(node, object) if(object < node
C言語・C++・C#
-
15
C言語について。
C言語・C++・C#
-
16
【至急】C言語の問題です、どなたか分かる方いませんか? 以下のコードは配列abcdeをbodesにず
C言語・C++・C#
-
17
C言語について。
C言語・C++・C#
-
18
C言語について
C言語・C++・C#
-
19
C言語 解答について。
C言語・C++・C#
-
20
C言語について。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
macで、cdで移動できない
-
make時に出てきたエラーメッセ...
-
SAMBA上に書き込んだファイルの...
-
scpによるデータ転送後、ディレ...
-
シンボリックリンクについて
-
/home/lost+foundを消してしまった
-
"cp -a"と"cp -r"の違い
-
lha32 コマンドオプション
-
サーバー間のデータコピー(デ...
-
ftpのmgetコマンドの自分の格納...
-
FTPサーバを立ち上げたい
-
ディレクトリ内に作成できる最...
-
/(スラッシュ)で区切ったフル...
-
「umask 111 」でファイルを作...
-
拡張子.dどういう意味
-
ホームページのディレクトリを...
-
プログラム資産ってなんですか
-
Sambaへの接続で「ネットワーク...
-
フォルダにアクセスするとファ...
-
古いファイルやディレクトリを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ftpのmgetコマンドの自分の格納...
-
7zを使うとフォルダの中身がす...
-
ホームページのディレクトリを...
-
make時に出てきたエラーメッセ...
-
拡張子.dどういう意味
-
/(スラッシュ)で区切ったフル...
-
scpによるデータ転送後、ディレ...
-
バッチファルの置き場所
-
FTPコマンドのCDについて
-
"cp -a"と"cp -r"の違い
-
「ドット(.)」と「¥」の意味...
-
ファイル名で / (スラッシュ...
-
tarコマンドのエラーについて
-
Linuxコマンドについて
-
linuxコマンド mkdirでディレ...
-
unzipコマンドでディレクトリな...
-
「照合パターンに合いません」...
-
tarでディレクトリのみをアーカ...
-
WriteFileの引数について
-
ftpでのフォルダごとの転送はで...
おすすめ情報