日付名のディレクトリを世代管理したい

このQ&Aのポイント
  • あるディレクトリ内で日付のディレクトリを3世代管理しています。スクリプトを使用して古いディレクトリを削除したいです。
  • ディレクトリ内には日付のディレクトリ以外にも様々なフォルダ・ファイルがありますが、日付のディレクトリだけをソートして削除したいです。
  • 具体的には、同一ディレクトリ内にある日付のディレクトリの中から4番目に古いディレクトリを削除したいです。
回答を見る
  • ベストアンサー

日付名のディレクトリを世代管理したい

linuxのコマンドについて教えてください。 あるディレクトリ内で日付のディレクトリを3世代管理しています。 今まではrmで手動削除していたのですが、他のディレクトリでも同様の作業をしたいので、 スクリプトで行おうと考えています。 ただ、ディレクトリ内には様々な名称のフォルダ・ファイルがあり、 上手く日付のディレクトリを取ってこれません。 イメージとしては日付のディクトリだけを取ってきて、ソートし古いのを削除でいけると思うのですが… 詳細は以下です。 同一ディレクトリ内に以下のフォルダがある 20150101 20150103 20150105 20150107 hoge test sample.txt などなど この中で日付のディレクトリの4番目に古いディレクトリを削除したい。 (20150101のディレクトリだけ削除するイメージです) どのようにコマンドを打てばいいか教えていただけますでしょうか? よろしくお願い致します

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

  • ベストアンサー
回答No.1

ls [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | sort -rn | tail +4 | xargs rm -fr って感じでしょうか。 ls 数字8文字 | 降順ソート | 上から4つ目移行 | rm -fr でディレクトリの中身ごと削除 テストしてないので、 どこかテスト環境で試してからにして下さい。

satsusatsu1202
質問者

お礼

素早い回答ありがとうございます。 無事やりたいことができました。 ご丁寧にありがとうございます。

関連するQ&A

  • 親ディレクトリの更新日付を更新せずにファイルを削除するには

    親ディレクトリの更新日付を更新せずにファイルを削除するには 例えば、以下のディレクトリ構成で「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で削除する前にディレクトリ情報を一時ファイルへ書き出すしかないと思っています。 以上、よろしくお願いします。

  • Windowsのディレクトリを削除できたり、できな

    Windows7で以下の操作をしました。 1. 2階層のディレクトリを作成 (コマンドプロンプト) >D: >md hoge >md hoge\foo 2. エクスプローラーでD:\hoge\fooを開いたままにする 3. コマンドプロンプトでhogeをrdの/Sオプションで削除 rd /Q /S hoge 「ディレクトリが空ではありません。」とメッセージとなり、 ディレクトリhogeを削除されませんでした。 しかし、ディレクトリfooは削除されているので、空ではない です。 PCによって(タイミング?)、3.が成功するのですが、どのような 状況だと削除できないのでしょうか。

  • 初心者ですが。ディレクトリの削除

    unixであるディレクトリ以下のファイルを全て削除したい場合はどのコマンドを使えばいいですか?rm -rf ディレクトリ名すると、1つ1つ削除するか確認を求めてきます。この確認を省く方法はありますでしょうか。宜しくお願いします。

  • DOSコマンドで過去日付のついたファイル名のテキストデータを削除

    DOSコマンド初心者です。 自動的に、とあるフォルダーに日付+ABC.TXTデータが作成されるのですが、増えるいっぽうで削除は手動でしてます。 自動で何日前分を削除する方法を教えてください。 DOSバッチとタスクスケジュールで出来ないものか考えています。

  • フォルダを削除できません。ディレクトリが空ではありません。

    誰かが使ったUSBメモリ内のフォルダ ¥rm -rf dirname を削除しようとしたら、以下のようなメッセージ が表示されてしまい、削除することができません。 何か解決策がありましたら、教えてください。 「$rm -rf dirname フォルダを削除できません。ディレクトリが空ではありません。」

  • linuxで特定のディレクトリのみにアクセスさせたい。

    linuxで特定のディレクトリのみにアクセスさせたい。 以下のようなディレクトリがあったとして、あるユーザーには、hoge5だけをアクセスさせるようにしたいです。 但し、hoge5以外はパーミッションを変更したくありません。 何かよい方法ありますでしょうか? hoge1 775 hoge2 775 hoge3 775 hoge4 775 hoge5 775 すみません、linuxはよく分かっておらず、質問に抜けがありましたらご指摘ください。

  • FTPコマンドで、カレントディレクトリを日付の一番新しいものに移動する方法

    linuxのFTPコマンドについて質問です。 FTPで他のlinuxサーバに入ったあと、  「特定の文字列で始まり、且つその中でも日付が一番新しいディレクトリ」に CDコマンドで移動したいのですが、コマンドでそれを実現することは出来ますでしょうか? lsで表示されたディレクトリの中から目視で新しいディレクトリを探すという ことではなく、シェルの一部に組み込みたいので、 コマンドで対応したいです。 ディレクトリ名は、「○○○1」「○○○2」・・・「○○○5」という 風に「○○○」は同じで数字部分が増えていく形式です。 且つ、一番新しい数字のものが一番新しいタイムスタンプとなっています。 (関係ないディレクトリ「■■■1」~「■■■5」というのも混在しています) なので、dirコマンドで「dir ○○○*」として絞ったあと 日付が最新 or 数字の大きいものというものを抽出した結果を、 CDコマンドに渡せればと思っています。 (方法は問いません) 良い方法があれば、教えていただきたいです。 よろしくお願いします。

  • 【シェル】日付が最も古くサイズが小さいファイル削除

    ディレクトリ内のファイルで、日付が最も古い&(且つ)サイズが小さいものを削除するシェルを作成しようと考えています。 当初の以下のような考えをしていましたが、うまくいかないので質問しました・・・ ls -lStr(カレントディレクトリで日付が古くサイズが小さい順のつもり・・・) 上記のコマンド実行にて、 合計 100 -rwxr-xr-x 1 root root 333 2月 22 2009 java.log と表示されるのを利用し、上から2行目のファイル名を取得するためawkして『java.log』というファイル名をprintfで表示させ変数か何かに格納し、rmコマンドで削除という流れを考えていました。 よくよく考えると ・ls -lStr は本当に日付が古くサイズが小さいものでソートされているのか ・lsコマンドで表示した『2行目』という指定でファイル名の取得できるのか がよくわからなくなってしまいました。 上記の考え方よりこっちのほうが良い!やアドバイスがあれば非常に嬉しいです。 よろしくお願いしますm(__)m

  • ディレクトリの容量を調べたい

    aaaa ├ sample1 ├ sample2 ├ sample2 ├ sample3 ├ sample4 ├ sample5 ├ ・ ├ ・ ├ ・ ├ sample299 └ sample300 と、aaaaディレクトリ以下の1~300の各ディレクトリの容量を 調べたいのですが、どのようなコマンドを使えば効率がよく 調べられますでしょうか?

  • 特定の更新日付のファイルのみを移動するにはどうしたらよいのでしょう

    Linuxのコマンドについてご教授ください。 1.ファイルの移動ですが特定の更新日付のファイルのみを移動するにはどうしたらよいのでしょうか? 2.ファイルを完全に消すにはrm コマンドでファイルは完全に削除されるのでしょうか?(ディスクが満杯に近い時にファイルを削除したいので、完全に削除した いのですが) ご存知でしたらよろしくお願いします。