• ベストアンサー

ファイルの削除

日付をファイル名とし、データ量で「-」と「数字」を付加した 2ページ目以降が作成され、日によって1~10ページ程度の htmlファイルが以下のように出来上がります。 ./hoge/20141106.html ./hoge/20141106-2.html ./hoge/20141106-3.html 以下の処理で「./hoge/20141106.html」は削除できましたが、 「-2」や「-3」以降も削除する記述をご教示お願いします。 unlink("hoge/$temp.html"); どうぞ宜しくお願いします。

  • Perl
  • 回答数3
  • ありがとう数12

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

unlink は ファイル名にワイルドカードや正規表現を含めることはできません。 但し ファイル名の配列を指定することは可能です。 以下のようにしてください。 --------------------------------- @result = glob("./hoge/$temp*.html"); unlink @result; ----------------------------------

mnbvc321
質問者

お礼

お礼が遅くなり申し訳ございません。 先ほど試してみたところ、希望通りに動作してくれました。 これからは古いデータを手動で削除しなくて済むように なったので、手間が省けて助かります! ご親切にご教示頂き有難うございました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

おしぃ>#1

参考URL:
http://perldoc.perl.org/functions/unlink.html
回答No.1

ハイフンいかが数字ひと桁だとするなら、まぁ簡単にやるなら unlink("hoge/$temp-[0-9].html"); を足すとか。 もっと大雑把にやるなら unlink("hoge/$temp.*.html"); かな。 消してはいけない類似した名前のファイルがあったら工夫してください。

mnbvc321
質問者

お礼

レスありがとうございます。 unlink("hoge/$temp-[0-9].html"); unlink("hoge/$temp.*.html"); 両方試しましたが削除できませんでした。 >消してはいけない類似した名前のファイルがあったら… ファイル名の$temp部分は50日を経過した日付を指定しているので 消してはいけないファイルは無いので大丈夫です。 以下のように二行で記述しました。 unlink("hoge/$temp.html"); unlink("hoge/$temp-[0-9].html"); ./hoge/20141106.html  ←削除完了 ./hoge/20141106-2.html ←削除不能 ./hoge/20141106-3.html ←削除不能 上記のようになります。 ご助言よろしくお願い致します。

関連するQ&A

  • 特定のフォルダー内の全てのファイルを削除するには

    お世話になります。 Perlで特定のファイルをunlinkで削除することは、したことがあるのですが、特定のフォルダ例えばCGIプログラムのあるフォルダ配下の「./temp」フォルダー内の全てのファイルを削除するプログラムは、どのように記述すればよいのですか?よろしくお願いします。

    • ベストアンサー
    • Perl
  • 指定以外のファイルやフォルダを削除したい。

    デスクトップ上にあるファイル、フォルダの内、 指定したファイル、フォルダ以外を削除するBATファイル、 もしくはVBSを作成したいのですが、 どのような記述をすれば良いのでしょうか? OSはWindows2000 server SP4です。 どなたかご教示よろしくお願いいたします。 例: デスクトップに以下の2つのファイルと1つのフォルダがあり、 これ以上デスクトップにファイルやフォルダを増やしたくないのですが、 「hoge2.txt」 「hoge.lnk」 「hoge」 誤って以下のファイルとフォルダを作成してしまいました。 「hoge1.txt」 「hoge.jpg」 「hoge2」 「hoge2.txt」と「hoge.lnk」「hoge」は常にデスクトップに残し、 「hoge1.txt」と「hoge.jpg」「hoge2」を一括削除したい。

  • 古いファイルを削除したいのですが。。。

    こんにちわ。 findコマンドを使って、あるディレクトリにどんどんできるファイルの古くなったものを削除したいのです。 例えば、7日以上更新がないものを削除したく、 # find /hoge/backup -mtime +7 -a -type f -exec rm -f {} \; というコマンドを実行してみましたが、結果は、削除されず残ったままで、しかも一部のファイルが元々古い日付だったものが、実行日時でタイムスタンプが書き変わってしまってます。 シェルはbashでもcshで試しても同じでした。 どうすればよいかご教示お願いできますでしょうか?

  • No.1067の『ファイルの削除について』の続き

    あるディレクトリ内のファイル(ファイル名はマシン日付.csvとなっています。例:20040906.csv)を検索し、 今日より90日前の日付を取得し、それ以前のファイルをディレクトリから削除するという操作をしたいと思います。 ただし、ファイル名の20040906の前後に文字がある場合には削除できないようにしたいのです。 -------------------------------------- 以下、EtherskyのNo.1067に対する回答より抜粋 $day = 90; #90日前 $dir = './hoge'; #hogeディレクトリとする ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time-(60*60*24*$day)); #$day日前の日付を求める $del_target = sprintf("%04d%02d%02d",$year+1900,$mon+1,$mday); #yyyymmddの形にする($del_target前を削除対象にする) opendir(DIR,$dir); #ディレクトリを開く @list = grep {/\.csv$/i && -f "$dir/$_"} readdir(DIR); #ディレクトリから拡張子csvでファイルだけを吸い出してリストにする closedir(DIR); #ディレクトリを閉じる foreach (@list){ #リストから一つずつ調べる if(/(\d+)\.csv$/i){ #頭が数字のファイルだったら if($1 lt $del_target){ #$del_targetと比較して該当するなら unlink("$dir/$_"); #削除 } } } -------------------------------------- 上記の場合で試したところ、20040906の前にabcとつけると 削除されてしまいます。 後ろにabcがついている場合には削除されません。 どのようにすれば削除されないようになるでしょうか?

    • ベストアンサー
    • Perl
  • ディレクトリ内のCSVファイル一括削除について

    ディレクトリ内のCSVファイルを一括削除したのですがうまくいきません。 下記のように記述しているのですが。 unlink($path/*.csv);

    • ベストアンサー
    • Perl
  • 削除フラグ

    こんにちわ。今まで、同じような質問をしてきたものです。 PHPの掲示板で削除機能を作成しようとしています。 投稿番号や削除キーがあっていれば、削除をするという 削除フラグまではを作成したのですが、実際の削除(論理削除)がうまく行かず、苦悩しております。下のarray_splice()の配列から特定の行を削除・置換する関数を使用し削除をしようとしているのですがこれでは論理削除などはできないでしょうか?関数ではできないのでしょうか?また、if( $temp[5] !=0 )とすることで、物理削除ではなく表示を させないということで、論理削除としようと考えました。 掲載した記述部分は、削除ボタンが押されたら削除処理をする 部分です。また、実際の書き込み部分も記述させていただきます。 <?php $NO = $_POST["NO"]; $hoge = $_POST["hoge"]; $delkey = $_POST["delkey"]; # 削除ボタンが押されたら if($submit =="削除"){ $data = file("data.txt"); foreach( $data as $value){ $temp = explode("\t",$value); if($temp[4] == $NO && $temp[6] ==$delkey ){ //削除フラグを0以外にする処理 if( $temp[5] !=0 ){ array_splice($data, $temp[4], 1); } } } } ?> 書き込み部分は下のようにしています。 $file = fopen("data.txt", "w"); fwrite($file, "$name\t$mail\t$body\t$dt\t$count\t$flag\t$delkey\n".implode("", $data)); fclose($file);

    • ベストアンサー
    • PHP
  • PHP 削除やコピーが出来ない

    PHP 削除やコピーが出来ない $rcd = unlink("test.txt"); $rcd = `rm test.txt`; $rcd = exec('test.txt'); 上記のように、削除コマンドを実行しても削除されない。 コピーコマンドも、同じくで copy("hoge.txt", "hoge.dat"); fcopy("hoge.txt", "hoge.dat", TRUE); `cp hoge.txt hoge.dat` と、やってみたが削除対象ファイルなどに変化はありません。 ちなみに、削除対象ファイルのパーミッションは、644。 PHPファイルは、755. レンタルサーバーを、二つほど変えてみたが同じでした。 エラーを表示することも無かったので、何が悪いのかさっぱり分かりません。 何か、よい方法を教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 親ディレクトリの更新日付を更新せずにファイルを削除するには

    親ディレクトリの更新日付を更新せずにファイルを削除するには 例えば、以下のディレクトリ構成で「aaa.txt」を削除しても親ディレクトリである「AAA」の更新日付が変更されない方法はありますでしょうか? なお、実装はRHEL5上でのBashスクリプトになります。 /home/hoge/AAA/ => 2010/10/01 06:30:00 /home/hoge/AAA/aaa.txt => 2010/10/01 06:30:00 2010/10/03 12:30:00に以下のコマンドを発行 rm /home/hoge/AAA/aaa.txt /home/hoge/AAA/ => 2010/10/03 12:30:00 に更新されてしまいます。 => 2010/10/01 06:30:00 を保持していたいのです。 できればコマンドのみで解決したいと思っています。 コマンド単体で無理なら、rmで削除する前にディレクトリ情報を一時ファイルへ書き出すしかないと思っています。 以上、よろしくお願いします。

  • コマンドプロントでファイルの削除方法

    コマンドプロント初心者です。 やりたいことは、バッチ処理にて、指定したフォルダ内の「*.dat」ファイルを削除することです。 ネットで調べてみたんですが、削除されません。 また、削除してよいかの確認メッセージも表示されません。 何が悪いのかご教授お願いします。 以下が作成したバッチファイルの中身です。 -- ********************************** -- Outlook 2010 添付ファイルのキャッシュを削除する -- ********************************** C:\Temp>del *.dat C:\Temp\*.dat、よろしいですか (Y/N)?

  • unlinkしたファイルを元に戻す方法?

    UNIX系OSでは(Windowsとかでもできるのでしょうか?) プログラム中で使う一時ファイルを、 プログラムが途中で異常終了したりした場合でも 確実に消えてなくなるように、 int fd = open( "temp.dat", O_RDWR|O_CREAT ) ; unlink( "temp.dat" ) ; というように、一時ファイルを作った直後にunlink、という手段が よく使われますが・・・ この、unlinkしてしまって、ファイルディスクリプタだけになったファイルを、 別のファイルに自力で書き写す以外に、 再びファイルとして残すことってできないのでしょうか? 要するに・・・ プログラムが途中で異常終了したりしたときは、 確実に消えてほしいけれど、 必要な場合は残したい、でも、残す処理が途中で中断したりして、 半端なファイルが残ってほしくない、 ・・・というような要件なのですが。。

専門家に質問してみよう