リモート側のファイル名を一括変更したのですが、正規表現の方法がわかりません。
現在は以下のとおり記述しています。
opendir(DIR, $FTPdir);
@FTPlist = grep (/^$head$year$mon$mday.*\.csv$/, readdir(DIR));
closedir(DIR);
if (@FTPlist){
foreach (@FTPlist) { rename /^$head$year$mon$mday.*\.csv$/,/^$head$year$mon$xday.*\.csv$/,);
print ;
print "\n";
}
}
No.6
- 回答日時:
#5>
補足のプログラムでは、リモートのファイルのリストを取っていません。
opendir(DIR, $FTPdir);
のファイル名は、ローカルですから
リモートとファイル名が一致していないのではないでしょうか?
リモートのファイルのリストは
$FTP->ls
でとってこないといけないと思います。
No.5
- 回答日時:
リネームするのに使っている、スクリプトの全体を補足していただけませんか?
(ユーザ名とかパスワードは変更して)
この回答への補足
sub main{
$FTP = Net::FTP -> new($FTPserver) or die('Net::FTP失敗。終了します。');# FTP接続
if ($FTP) {
$FTP -> login($FTPuser, $FTPpass) or die('login失敗。終了します。');# ログイン
print "にログインしました。\n";
$FTP -> cwd($FTPdir) or die('cwd失敗。終了します。');# ディレクトリの変更
print "$FTPdirにディレクトリを変更しました。\n";
#システム日付の取得
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);#本番用
$year = 1900 + int($year);#本番用(年は1900マイナスで返ってくるため)
$mon = 1 + $mon;#本番用(月は0~11で返ってくるため1プラスする)
if ($mon < 10) { $mon = "0$mon"; }#一桁の月は頭に0をつける
if ($mday < 10) { $mday = "0$mday"; }#一桁の日は頭に0をつける
print "<システム日付:$year$mon$mday>\n";
#リストファイル画面出力
opendir(DIR, $FTPdir);
@FTPlist = grep (/^$head$year$mon$mday.*\.csv$/, readdir(DIR));
closedir(DIR);
if (@FTPlist){
foreach (@FTPlist)
{
$wk=$_;
$wk =~ s/^$head$year$mon$mday(.*)\.csv$/$head$year$mon$xday$1\.csv/;
$ftp -> rename($_,$wk);
print ;
print "\n";
}
}
$FTP -> quit or warn('初回quit失敗');# FTP切断
print "\n";
print "FTPを切断しました。\n";
}
close(MOUT);
}
No.4
- 回答日時:
>上記の記述はしているのですが・・・。
そうですか…
こちらでも試しに
$ftp->rename(from,to);
してみましたが、問題なく動きました。
なので記述の問題ではないと思います。
Perlがインストールされているフォルダに
lib/Net/FTP.pm
というファイルがあると思うのですが、
その中に、
sub rename
というメソッドを定義している部分があるはずなのですが、これがありますか?
これがあるなら、
やはり、Ftpオブジェクトが正しく作られていないと思います。
今まで、ファイルの一覧とかゲットができているので、ちょっと考えにくいですが、何らかの原因で、接続できていないとかあるのかもしれません。
ご回答ありがとうございます。FTP.pmの中を確認しました。おっしゃるとおりsub renameという定義ありました。
接続も確認メッセージを出しながら実行しているので、できていると思うのですが。
renameの記述をコメントにすると正常に動作するようです。
No.1
- 回答日時:
試してないけど、多分以下のような感じでいいと思う。
foreach (@FTPlist) {
$wk=$_;
$wk =~ s/^$head$year$mon$mday(.*)\.csv$/$head$year$mon$xday$1\.csv/;
rename $_ , $wk;
print ;
print "\n";
}
ご回答ありがとうございます。
できるようなのですが、この指定だとリモートではなくローカルをみにいくようです。
この場合、リモート、ローカル、それぞれのパスを指定してrenameするのはどのようにするのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/10 09:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
openした後、closeしないでプロ...
-
アルファベットに付いて質問し...
-
Perl の外部モジュールの利用方法
-
INDIRECT 横に再度抽出したい
-
ファイルアイコンの左下に緑の□...
-
テキストファイルで提出とは?
-
Perl 特定のフォルダ以外削除
-
bashスクリプト
-
perlをバージョンアップしたら...
-
Perlのエラーについてご教授く...
-
perlプログラミング 空白行削除
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
プログラミングでポインタの勉...
-
perlで文字の置換又は抽出に関...
-
MediBang Paint Proについて
-
ラズベリーパイ初心者です。 ラ...
-
perlのflock関数でロックをかけ...
-
perlでリテラル値はメモリにど...
-
perlのプログラミング 部分入れ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルで提出とは?
-
openした後、closeしないでプロ...
-
perlをバージョンアップしたら...
-
INDIRECT 横に再度抽出したい
-
Perl の外部モジュールの利用方法
-
Perlで特定文字列から特定文字...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
Strawberry Perl for Windows ...
-
perlで2次元配列をサブルーチ...
-
TeraPadエディターの操作方法に...
-
アルファベットに付いて質問し...
-
perlのflock関数でロックをかけ...
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
Wallpaper Engineでおすすめの...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
perlでリテラル値はメモリにど...
-
画像が表示でnull; this.src
おすすめ情報