以下のようなシェルスクリプトを作成しましたが、
(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も見ています
-
【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
【お題】 ・存在しそうで存在しないモノマネ芸人の名前を教えてください
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
【お題】 ・急に朝起こしてきた母親に言われた一言とは?
-
シェルスクリプトでFTPの実行結果を取得するには
その他(プログラミング・Web制作)
-
ftpコマンドのput,mputの上書きしない方法について
サーバー
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
新サーバーに同じ環境で構築
-
xfz zxvf??
-
画像がHPにアップしても全て表...
-
著作権法違反
-
txt ファイル (テキストフ...
-
SONY ICカードリーダー RC-S330...
-
拡張子「KRF2」ファイル
-
MPC-BEのアスペクト比
-
JPEGからRAWデータへの変換に関...
-
インターネットアーカイブで閉...
-
win10にインストールしたOpera...
-
サポートされてないファイル形...
-
コイカツ!インストールできませ...
-
非公式太鼓の達人シミュの「Tai...
-
Cドライブの「APSETUP」という...
-
windows8ムービーメーカーをDVD...
-
壁紙の保存場所
-
拡張子tmpファイルを開く方法
-
ダウンロードしたファイルの出...
-
毎日の英文法の音声ダウンロー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPに接続し、 あるフォルダ内...
-
ファイルの作成・更新日時が200...
-
robocopyでファイルがあるのに...
-
FTP受信直後に受け取ったファイ...
-
バッチファイルでフォルダ内の...
-
win2008serverでaspxを表示させ...
-
FTPのmputで出るnetoutについて
-
FTPで見えるファイルと見えない...
-
シェルでftp接続によるファイル...
-
拡張子のhtmlをhtmに変更す...
-
index.html をブラウザで開...
-
FFFTPで属性変更できない(Fedr...
-
ApacheでSorryサーバを作りたい
-
WinSCPを使ってgetし、ローカル...
-
Apache2.2.6にてBasic認証の設定
-
FFFTPでSolarisサーバーのファ...
-
xfz zxvf??
-
MacOSエラー -50
-
メールフォーム設置の仕方を教...
-
vi で上書き保存(:wq)すると...
おすすめ情報