• ベストアンサー

シェル操作でファイルを削除

現在、作前日の不要なファイルを削除するステップですするというシェルを作成したのですが、 #!/bin/sh set `date --date '1 days ago' '041125'` rm -f /ファイルパス/*$1.txt 何故か、041126に作成された全てのテキストファイルが削除されてしまいます。 何がおかしいのでしょうか?

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

  • ベストアンサー
  • shige_70
  • ベストアンサー率17% (168/946)
回答No.1

まず、2行目はdateもsetも使い方が正しくありません。 その後3行目はおそらく$1は空っぽです。$1が2行目でセットされるとお考えでしょうけど、違います。 単に古いファイルを消したいだけなら、 find /ファイルパス/ -mtime +1 -exec rm -f {} \; とやれば、最終更新時刻が1日以上(『前日』ではなく『24時間以上前』なので注意)のものはすべて消せます。

aiurai54
質問者

お礼

ありがとうございます。一日前のファイルを削除することができました。 もう一つ、test_20041126_aというフォルダがあった場合現在の日付よりも一日前のフォルダを削除するとした場合、どのように書けばいいのでしょうか? こちらもファイルの削除と同じようにしたかったのですが、消してはいけないフォルダもあるので。。。 もし、よろしければ教えてください。

その他の回答 (2)

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.3

#1です。 まず、最近は普段ウインドウ図を使っている方たちは『フォルダ』という表現をお使いになりますが、unixでは『ディレクトリ』といいますので、念のため。 ファイルやディレクトリの名前に日付をつけているなら#2さんの方法でも良いですね。 ディレクトリを消したい場合は、#1で紹介したfindのコマンドラインの『rm -f』の部分を『rm -rf』に変更すればできますが、その場合、ディレクトリ内にもし今日更新したファイルがあっても消してしまいますので、それが困るのであれば、 find /ファイルパス/ ! -type d -mtime +1 -exec rm -f {} \; としてから find /ファイルパス/ -type d -mtime +1 -exec rmdir {} \; としてください。rmdirがエラーメッセージを表示することがありますが問題ありません。

aiurai54
質問者

お礼

ありがとうございます。参考にさせていただきます。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

>もう一つ、test_20041126_aというフォルダがあった場合現在の日付よりも一日前のフォルダを削除するとした場合、どのように書けばいいのでしょうか? 実行日の前日をファイル名に持つディレクトリを削除するなら、 rmdir `date --date '1 day ago' +test_%Y%m%d_a` とかでしょうか。ディレクトリ下にファイルがあるなら、rmdir じゃなくて rm -r で。 あと、2004年11月25日の1日前を求めたいなら、 date --date '1 day ago 041125' と、--date の引数は文字列1つにしないとだめです。

aiurai54
質問者

お礼

ありがとうございます。参考にさせていただきます。

関連するQ&A