質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

12849閲覧

FTPで取得後削除を正しく行いたい

habu27

総合スコア13

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/09/18 00:53

前提・実現したいこと

FTPにてファイルをコピーし、コピーしたファイルは削除するような処理を
行いたくshellにて下記の記述を行っています。
ソースとなるファイルは別のシステムが随時Web上のSubmitのタイミングで
生成するテキストになります。

下記の問題の検証方法やソースの修正方針が定まっていないため
御助力頂ければと思います。

発生している問題・エラーメッセージ

エラーにはならないのですが、ごく稀にファイルがコピーもされず無くなる事が
あります。おそらくmgetした瞬間には生成されていなかったファイルがmdelした
タイミングでは生成されており、削除されたのではないかと推測しています。

該当のソースコード

mget * mdel *

試したこと

無くなったファイルの作成タイムスタンプが、上記のコピー&削除処理の
時間と被っている事がわかりました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まず、ls * filenamelist.txtでローカルのファイルにls結果を落とします。
一旦ftpを終了して、そのファイルを読んで、get xxxx del xxxxというコマンドリストを作成します。
そのコマンドリストを使って、ftpスクリプトを更新して、再度ftpします。

投稿2018/09/18 01:42

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

habu27

2018/09/21 03:44

ご回答ありがとうございます。 コマンドリストを作成する方法も検討してみましたが より単純な方法で実装となりました。
guest

0

ベストアンサー

質問に書かれたコードであれば、mget *mdel * の実行に時間差があるので、mgetコマンドを送信してファイル転送中に作成されたファイルもmdelで一緒に消してしまうので、当然ファイルの消失が発生するでしょうね。

このコードを使うのであれば、この処理中はディレクトリ内に新規にファイルを作成できないようにする必要があります。


自分で作るとすれば...

ftp のls * で、サーバーのファイルの一覧を取得して、ファイルの一覧を順番にループで、get ファイル名 で、ダウンロードして、成功したら del ファイル名 で削除する。

もしくは、 mget * で一括ダウンロードしてから、ローカルディレクトリのダウンロードしたファイルの一覧を作成して、順番に del ファイル名 でしょうか。

少なくても ファイルの削除に ワイルドカードは、使わないです。

投稿2018/09/18 01:13

編集2018/09/18 01:16
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

habu27

2018/09/21 03:43

ご回答ありがとうございます。 後者の方法で実装しました。 元の作りで問題があるという検証が難しく「解決した」と 明言できないのがつらい状態ではありますが。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問