
以下のようなシェルスクリプトを作成しましたが、
(file-name) get: No such file or directory
(file-name) done: No such file or directory
のエラーメッセージが出てしまい、うまくいきません。
OSはLinux(FedoraCore4)です。
どうやらファイル名の取得がうまくいかず、エラーになっている
様です。
試しに直接ファイル名を指定して書くと、無事ファイルを
取得できます。
エラーの原因がお分かりになる方、どうぞ宜しくお願い致します。
-----------------------------------------------
#!/bin/sh
cd /local_test/log/
ftp -n xxx.xxx.xxx.xxx<< _EOF
user test_user test_pass
cd /test/log/
ascii
prompt
for i in *.log
do
chmod u+r $i
get $i
chmod u-r $i
done
bye
_EOF
exit 0
-----------------------------------------------
No.4ベストアンサー
- 回答日時:
こんにちは、ham_kamoです。
ls *.logの結果で、ls -l と同じ表示が出てしまいましたか。
環境によって違うものなのですね。私が以前に使用していたサーバではファイル名一覧だけ出てきたのですが。
No.3の方が書いている
quote site chmod u+r *.log
という書き方も、そのサーバではエラーになっていました。(なのでややこしいスクリプトを書いたしだいなのですが)
もしお使いのサーバでは、上の書き方でエラーがならないのであれば、No.3の方の回答で済むと思います。
一応、それがエラーになってしまうから、という前提で、スクリプトに手を修正しました。さらにワンクッション置いて、ファイル名だけを抜き出して取得するようにしてみました。(テンポラリファイルがまた1つ増えました。。。)
以下のスクリプトで試してみていただけますか?
#!/bin/sh
cd /local_test/log/
tmpfile=/tmp/ftptmp.$$
tmpfile2=/tmp/ftptmp2.$$
tmpfile3=/tmp/ftptmp3.$$
tmpfile4=/tmp/ftptmp4.$$
cat > $tmpfile << _EOF
user test_user test_pass
cd /test/log/
ascii
prompt
_EOF
cp $tmpfile $tmpfile2
cat >> $tmpfile2 << _EOF
ls *.log
bye
_EOF
ftp -n xxx.xxx.xxx.xxx < $tmpfile2 | grep .log | grep -v '*.log' > $tmpfile3
awk '{print $NF}' $tmpfile3 > $tmpfile4
for i in `cat $tmpfile4`
do
cat >> $tmpfile << _EOF
quote site chmod u+r $i
get $i
quote site chmod u-r $i
_EOF
done
echo "bye" >> $tmpfile
ftp -n xxx.xxx.xxx.xxx < $tmpfile
rm $tmpfile $tmpfile2 $tmpfile3 $tmpfile4
exit 0
すごい!!出来ましたよ!!
本当にありがとうございました。。。
何度も何度も質問してしまって本当に申し訳なかったです。
ham_kamoさんのお陰で完了することが出来ました。
見ず知らずの私にこんなにも丁寧に教えて頂いて、感謝の気持ちでいっぱいです。
本当に本当にありがとうございました。
No.3
- 回答日時:
>やりたい事は、リモート先の指定フォルダ内にある"*.log"ファイルを
quote site chmod が効くようなので、
cd /local_test/log/
ftp -n xxx.xxx.xxx.xxx<< _EOF
user test_user test_pass
cd /test/log/
ascii
prompt
quote site chmod u+r *.log
mget *.log
quote site chmod u-r *.log
_EOF
この回答への補足
ご回答ありがとうございました。
またまた説明不足だったのですが、リモート先で
chmod での「*」使用が禁止されているのです。
(セキュリティ上の問題らしいです)
説明不足で申し訳ありませんでした。
No.2
- 回答日時:
No.1です。
> ローカルにある同名ファイルは取得できるのですが、無いものが取得できません
そうですね、ローカルのシェルスクリプトでファイルをgetするコマンドのスクリプトを作っているので、ローカルにあるファイルしか一覧に出ないですね。
chmodがなければ、
mget *.log
で一発なのですが、chmodが入るから、この手は使えません。
quote site chmod u+r *.log
という書き方もできないので。
と言うことで、ftpを2回にわけて行い、1回目はファイルリストを取得し、そのリストを元にftpのコマンドファイルを作成し、2回目に実際にgetするスクリプトに変えてみました。
#!/bin/sh
cd /local_test/log/
tmpfile=/tmp/ftptmp.$$
tmpfile2=/tmp/ftptmp2.$$
tmpfile3=/tmp/ftptmp3.$$
cat > $tmpfile << _EOF
user test_user test_pass
cd /test/log/
ascii
prompt
_EOF
cp $tmpfile $tmpfile2
cat >> $tmpfile2 << _EOF
ls *.log
bye
_EOF
ftp -n xxx.xxx.xxx.xxx < $tmpfile2 | grep .log | grep -v '*.log' > $tmpfile3
for i in `cat $tmpfile3`
do
cat >> $tmpfile << _EOF
quote site chmod u+r $i
get $i
quote site chmod u-r $i
_EOF
done
echo "bye" >> $tmpfile
ftp -n xxx.xxx.xxx.xxx < $tmpfile
rm $tmpfile $tmpfile2 $tmpfile3
exit 0
ただ、私の手元にテストできる環境がないので、実際に動くかどうかの確認はしていません。もしエラーが出た、うまく動かないなどの場合は、できるだけ詳しく(エラーメッセージなど)補足をお願いします。
この回答への補足
度々のご回答本当にありがとうございました。
早速職場で試してみた所、ファイルは無事取得できるようになったのですが、エラーメッセージが出ていました。
--w--w--w-: No such file or directory
--w--w--w-: No such file or directory
--w--w--w-: No such file or directory
(以下続く。。。)
$tmpfile3を削除せずに、このファイルを開いてみたら
--w--w--w- 1 test web 1213 Mar 6 16:52 200502.log
となっていたので、どうやら文字の区切りごとにファイル名として実行しているようでした。
後はファイル名だけを取得するようにすれば良いのですが。。。
すみません、もう少し教えて頂けると助かりますので
宜しくお願い致します。
No.1
- 回答日時:
問題点は2つあります。
まず、
ftp -n xxx.xxx.xxx.xxx<< _EOF
から
_EOF
の間には、FTPサーバに渡されるコマンドを記述しないといけません。その中に、
for in *.log
do
とFTPサーバが解釈できないシェルスクリプトが入っているので、エラーになります。
それからもう1つは、chmodです。これは、ローカルのファイルの属性を変更したいのか、リモートのファイルの属性を変更したいのか、どちらなのでしょうか。
ローカルのファイルの属性を変更したいのであれば、この chmod はFTPサーバで解釈されるので、うまくいきません。
リモートのファイルの属性を変更したいのであれば、FTPサーバではシェルとは少し書き方が違い、
chmod u+r $i
と同じことをFTPで行いたいときは、
quote site chmod u+r $i
と書かないといけません。
どちらにしても、正常に実行はされないはずです。
以上をまとめると、複数のファイルをまとめてFTPで扱うのであれば、いったん処理コマンドをテンポラリのファイルに書き出して、それを読み込ませたらいいのではないでしょうか。
一応、そのように書き直してみましたが、実際には動作確認していないので、エラーが出たらすみません。
#!/bin/sh
cd /local_test/log/
tmpfile=/tmp/ftptmp.$$
cat > $tmpfile << _EOF
user test_user test_pass
cd /test/log/
ascii
prompt
_EOF
for i in *.log
do
cat >> $tmpfile << _EOF
quote site chmod u+r $i
get $i
quote site chmod u-r $i
_EOF
done
echo "bye" >> $tmpfile
ftp -n xxx.xxx.xxx.xxx < $tmpfile
rm $tmpfile
exit 0
なお、このスクリプトでは chmod はリモートのファイルの属性を変更すると仮定して書いてますが、これがもしローカルのファイルの場合は、
quote site chmod u+r $i
quote site chmod u-r $i
を、それぞれ
!chmod u+r $i
!chmod u-r $i
に書き換えてください。(!はFTPでローカルコマンドを実行する記号です)
説明が足りなくて申し訳ありませんでした。。。
>それからもう1つは、chmodです。これは、ローカルのファイルの属性を変更したいのか、リモートのファイルの属性を変更したいのか、どちらなのでしょうか。
お察しの通り、リモートファイルになります。
やりたい事は、リモート先の指定フォルダ内にある"*.log"ファイルを
全てローカルへダウンロードしたいのです。
教えて頂いたとおりに書いてみたところ、ローカルにある同名ファイルは取得できるのですが、無いものが取得できません。。。
修正してみたのですが、うまく動作せずで。。。申し訳ありません、もしお分かりになるようでしたら、再度ご教授頂けると助かります。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 画像編集・動画編集・音楽編集 DVD Styler トラブル解決方法 6 2022/10/29 16:00
- Mac OS PATHを使ってcdなどで簡単に移動できるようになりたい 3 2023/05/13 14:22
- UNIX・Linux Linuxの実行結果を修正したいです。 6 2022/11/22 12:57
- その他(プログラミング・Web制作) Arduinoに関する質問 4 2023/08/07 21:19
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- Ruby 教えてください 2 2023/01/04 17:50
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- UNIX・Linux AWSのEC2のZabbixユーザーでawscliコマンドが実行できない状態を解決する 1 2022/12/06 22:17
このQ&Aを見た人はこんなQ&Aも見ています
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
最速怪談選手権
できるだけ短い文章で怖がらせてください。
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
人生で一番お金がなかったとき
人生で一番お金がなかったときって、どんなときでしたか?
-
シェルスクリプトでFTPの実行結果を取得するには
その他(プログラミング・Web制作)
-
FTPでリモートのファイル一覧取得
その他(プログラミング・Web制作)
-
FTP接続中のコマンド実行結果を変数に入れる方法
UNIX・Linux
-
-
4
-bash: ftp: コマンドが見つかりません
UNIX・Linux
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FTPに接続し、 あるフォルダ内...
-
robocopyでファイルがあるのに...
-
FFFTPでSolarisサーバーのファ...
-
win2008serverでaspxを表示させ...
-
FTPで見えるファイルと見えない...
-
ファイルの作成・更新日時が200...
-
ApacheでSorryサーバを作りたい
-
MPEG-4→MP3の変換方法
-
JPEGからRAWデータへの変換に関...
-
サポートされてないファイル形...
-
SONY ICカードリーダー RC-S330...
-
ps5のレストモードについて 新...
-
ZIPファイル内のファイルを...
-
GOMplayerの代わりになるソフト
-
.recファイルを.mp4に変換する方法
-
mscomct2.ocxをパソコンに導入...
-
Excelで勝手に保存画面に飛びま...
-
拡張子「KRF2」ファイル
-
txt ファイル (テキストフ...
-
エラー番号0X800C0002とアプリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPに接続し、 あるフォルダ内...
-
robocopyでファイルがあるのに...
-
FTP受信直後に受け取ったファイ...
-
FTP SJIS 能など(2バイト目5C)...
-
ファイルの作成・更新日時が200...
-
シェルでftp接続によるファイル...
-
win2008serverでaspxを表示させ...
-
バッチファイルでフォルダ内の...
-
FTPで見えるファイルと見えない...
-
読み取り専用ファイルとして認...
-
MacOSエラー -50
-
LinuxのFTPコマンドについて他
-
Spotlight検索ができない、索引...
-
Apache2.2.6にてBasic認証の設定
-
WinSCPを使ってgetし、ローカル...
-
シェルスクリプトで外部ファイ...
-
index.html をブラウザで開...
-
ApacheでSorryサーバを作りたい
-
FTPのアスキーモードってバイナ...
-
tftpというものを体験したい。
おすすめ情報