以下のようなシェルスクリプトを作成しましたが、
(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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
シェルスクリプトでFTPの実行結果を取得するには
その他(プログラミング・Web制作)
-
FTP接続中のコマンド実行結果を変数に入れる方法
UNIX・Linux
-
FTPでリモートのファイル一覧取得
その他(プログラミング・Web制作)
-
-
4
FTPコマンドの戻り値について
その他(OS)
-
5
ftpのmgetコマンドの自分の格納場所の指定方法は?
Windows Me・NT・2000
-
6
ftpでファイルを転送時、タイムスタンプを維持したい
UNIX・Linux
-
7
-bash: ftp: コマンドが見つかりません
UNIX・Linux
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FTPに接続し、 あるフォルダ内...
-
FTPで見えるファイルと見えない...
-
ファイルの作成・更新日時が200...
-
シェルでftp接続によるファイル...
-
読み取り専用ファイルとして認...
-
robocopyでファイルがあるのに...
-
FTP受信直後に受け取ったファイ...
-
サポートされてないファイル形...
-
ファイルをダウンロードした順...
-
JPEGからRAWデータへの変換に関...
-
SONY ICカードリーダー RC-S330...
-
ZIPファイル内のファイルを...
-
著作権法違反
-
mscomct2.ocxをパソコンに導入...
-
マクロ始めたばかりです。 デス...
-
EXCEL、上書き保存したは...
-
MPC-BEのアスペクト比
-
拡張子のないファイルの作成
-
win10にインストールしたOpera...
-
拡張子datを解凍するにはどうし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPに接続し、 あるフォルダ内...
-
robocopyでファイルがあるのに...
-
ファイルの作成・更新日時が200...
-
FTP受信直後に受け取ったファイ...
-
FTPで見えるファイルと見えない...
-
シェルでftp接続によるファイル...
-
FTP SJIS 能など(2バイト目5C)...
-
シェルスクリプトで外部ファイ...
-
メールフォーム設置の仕方を教...
-
読み取り専用ファイルとして認...
-
win2008serverでaspxを表示させ...
-
バッチファイルでフォルダ内の...
-
WinSCPを使ってgetし、ローカル...
-
Apache2.2.6にてBasic認証の設定
-
ApacheでSorryサーバを作りたい
-
Spotlight検索ができない、索引...
-
Apache2のリバースプロキシを経...
-
index.html をブラウザで開...
-
FTPのmputで出るnetoutについて
-
floatで保存したRAWファイルをI...
おすすめ情報