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

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

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Linux

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

2回答

9598閲覧

【シェルスクリプト】SFTPでのファイル取得・削除について

yofukashi

総合スコア1

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Linux

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

1クリップ

投稿2021/04/13 08:13

編集2021/04/13 10:03

前提・実現したいこと

■実現したいこと
手動で実施しているlinuxサーバ間のファイル移動・削除をシェルスクリプトで自動実行したい

シェルスクリプトにてリモートサーバのディレクトリ内の全ファイルを取得をした後、全ファイル削除を実施したい
※定期実行はcrontabにて実施予定

サーバ1→サーバ2
サーバ1からサーバ2にsftpして、getして、その後ファイル削除

■コマンド
サーバ1内に配置しているシェルスクリプト内コマンド

・ファイル取得コマンド:
sftp [user名]@[remoteIPアドレス]:* [localディレクトリ]

・ファイル削除コマンド
ファイル削除コマンドをスクリプトで実施する方法が分かりません。

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

手動でsftpログインすれば、"rm *"で削除できるのは理解しているのですが シェルスクリプトにすると応答モードにならないため ファイル取得コマンドのように、1行で実施可能なコマンドを確認したい

該当のソースコード

応答モードで検討していた際のコマンド: sftp [user名]@[remoteIPアドレス] [パスワード] get * rm * bye

試したこと

ファイル取得コマンドを以下に代替

sftp [user名]@[remoteIPアドレス]:* [localディレクトリ]

・ファイル削除コマンド
ファイル削除コマンドをスクリプトで実施する方法が分かりません。

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

応答モード以外で、ファイル削除するコマンド自体がなければ
応答モードできるようにしたいと思っています

Linuxディストリビューションとバージョンを追記しました

取得元(local)サーバ:
NAME="Red Hat Enterprise Linux Server"
VERSION="7.6 (Maipo)"
ID="rhel"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.6"
PRETTY_NAME="Red Hat Enterprise Linux Server 7.6 (Maipo)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:7.6:GA:server"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
REDHAT_BUGZILLA_PRODUCT_VERSION=7.6
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="7.6"

取得先(remote)サーバ:
NAME="Red Hat Enterprise Linux Server"
VERSION="7.5 (Maipo)"
ID="rhel"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.5"
PRETTY_NAME="Red Hat Enterprise Linux Server 7.5 (Maipo)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:7.5:GA:server"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
REDHAT_BUGZILLA_PRODUCT_VERSION=7.5
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="7.5"

どうぞよろしくお願い致します。

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

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

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

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

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

ockeghem

2021/04/13 09:23

Linuxディストリビューションとバージョンを追記してください。
yofukashi

2021/04/13 10:04

コメントありがとうございます。追記させて頂きました
guest

回答2

0

そのまま、

sh

1sftp [user名]@[remoteIPアドレス] <<'XXXXX' 2[パスワード] 3get * 4rm * 5bye 6XXXXX

投稿2021/04/13 09:11

otn

総合スコア84559

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

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

yofukashi

2021/04/13 09:34

コメントありがとうございます。 sftp [user名]@[remoteIPアドレス] <<'XXXXX' "<<'XXXXX'"はどういう意図でしょうか 不勉強ですいません。どうぞ宜しくお願い致します。
otn

2021/04/13 09:37

XXXXXまでの行をそのコマンドの標準入力にするというシェルの基本機能です。
yofukashi

2021/04/13 09:57

ありがとうございます。 ご提示の内容でシェルを実行したところ、以下のようにパスワードを求められました。 シェル内で完結させる形にするには、何か不足していますでしょうか [test@server01]#sh test.sh test@[remote-IPアドレス]'s password: どうぞよろしくお願い致します。
otn

2021/04/13 10:20

失礼しました。ftpだとパスワードも標準入力から読んでくれるのですが、sftpだとsshと一緒ですね。 sshpass -p パスワード sftp [user名]@[remoteIPアドレス] <<'XXXXX' と、sshpassコマンドが必要。
yofukashi

2021/04/13 11:16

ありがとうございます。 sshpassがインストールされていないため、インストール後に確認させていただきます。 どうぞよろしくお願い致します。
guest

0

ベストアンサー

投稿2021/04/13 08:21

KojiDoi

総合スコア13671

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

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

yofukashi

2021/04/13 08:55 編集

コメントありがとうございます。rsyncですね。勉強不足ですいません、便利なコマンドですね! 前提条件が漏れており申し訳ありません 通信方向が移管先サーバ→移管元サーバ方向のため、移管先で以下のコマンドを実行しました rsync [USER]@[remote-IP]:/[remore-directory]/* [home-directory] ファイルが移動できました。ありがとうございます。 移管元でのファイル削除が実行されていないのですが、オプションコマンドが必要でしょうか? リンク先等を参照してもデフォルトで削除されるようなので。 どうぞよろしくお願いいたします。
KojiDoi

2021/04/13 09:12

ちゃんと書いてありますけど。 > 僕が実際同期以外でつかっているのは「--remove-source-files」と「--files-from=FILE」ですね。これで特定のファイルリストを作って別サーバーに転送し、転送後に削除を一連のながれでやってくれます。
yofukashi

2021/04/13 09:32

失礼しました。「--remove-source-files」を付けることで移管先のファイル削除されました。 rsync [USER]@[remote-IP]:/[remore-directory]/* [home-directory] --remove-source-files 迅速かつ丁寧にコメントいただきありがとうございます。 どうぞよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問