ディレクトリ内のファイルで、日付が最も古い&(且つ)サイズが小さいものを削除するシェルを作成しようと考えています。

当初の以下のような考えをしていましたが、うまくいかないので質問しました・・・

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

このQ&Aに関連する最新のQ&A

A 回答 (1件)

「最も古い&(且つ)サイズが小さいもの」は、ちょっと意味が不明です。

両方の条件が成り立つとはかぎりません。
「最古だけどファイルサイズが最小ではないもの」
「最古ではないけどファイルサイズは最小のもの」
の2つのファイルがある場合、どちらが削除対象ですか?

「最小ではなくても、とにかく最古」が対象なら、ls -tr
「最古ではなくても、とにかく最小」が対象なら、ls -Sr

になるでしょう。

あと、lsのソート順オプションが決まったとして、その一覧の先頭に来ているファイルを削除する方法についてですが、
ls に-l オプションを付ける必要はないでしょう。
-lオプションなしならファイル名だけが表示されますから、それがそのまま削除対象として使えます。

あとは、head コマンドを使って

ls -tr | head -1

で、lsの結果の先頭1行だけが表示されますから、

rm `ls -tr | head -1`

とすれば、そのファイルだけが削除されます。
(これは、最古の1ファイルを削除する例になります)
    • good
    • 1
この回答へのお礼

最初の条件はディレクトリ内にある更新が古い日付順(同日同時刻ファイル複数)
でソートし、さらに同日同時刻の古い複数ファイルの中でファイルサイズが小さいもの
でソートというイメージでした。
1.最古の日付でソート
2.1.の中で更にサイズでソート
のような感じです。

ちなみにlsの件はできました!ありがとうございました!

お礼日時:2011/04/20 09:42

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q復元ポイントの作成とイメージファイル等のバックアップとの違いについて

今晩は、宜しくお願いします。

復元ポイントの作成とイメージファイル等のバックアップとの違いについて教えて下さい。

Windowsで復元ポイントからシステムを復元させる方法があり、
また、イメージファイル等にバックアップをとり、復元させる方法もありますが
この両者はどのように違うのでしょうか。

復元ポイントの作成とは、その時点のシステムの設定等だけを保存しているという
ことでしょうか。

また、イメージファイル等のバックアップを作成するということは
システム設定と作成したファイル等もイメージファイルとして一括してバックアップ
されるのでしょうか。

イメージファイルの復元時に、作成したファイル等もイメージファイルから
復元されるのなら、同じ名前のファイルがあった場合には、
イメージファイル作成時の古い情報のファイルになってしまうのでしょうか。

以上、宜しくお願いします。

Aベストアンサー

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。修復されるのは、選択した項目により異なる。
WindowsREを利用。
https://msdn.microsoft.com/ja-jp/library/hh825173.aspx

【バックアップと復元】
システムのバックアップを作成し、ハードディスクなどが壊れた場合に備えパソコン内部のデータを全てバックアップ・復元出来る。
Windowsのインストールディスクや、システム修復ディスクから復元が可能。
システムもユーザーデータもバックアップを取った時点の状態に戻る。

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。...続きを読む

Q特定のファイルだけをサブディレクトリ以下のファイルをディレクトリを作成してコピーする。

下のように各フォルダ内にreadme.txtファイルだけを特定のフォルダ内に
コピーしたいのですが、ファイル名が同じなので、元のフォルダ階層のように
フォルダを作成して、そのファイルだけがコピーされるようなfindを使った
器用な方法はできるのでしょうか?

私は、次の段階で躓いて折ります。
find ./ -name ".forward"


execを使い方法は、
find img/ -type d -exec chmod 604 {} \;
のようなことは使ったことはありますが、通過したフォルダを作成して、ファイルをコピーする
ような方法はどのように記述したらよいか、わかりません。

A
+-- a1.txt
| a2.txt
| readme.txt
B
+-- b1.txt
| b2.txt
| readme.txt
C
+-- c1.txt
c2.txt
readme.txt

Aベストアンサー

例:下記のようなディレクトリ構成で各ディレクトリ(A,B,C)配下にあるreadme.txtをディレクトリsavedirにディレクトリを作成しつつコピーする場合。

ディレクトリ構成例
+A-+-- a1.txt
|  +-- a2.txt
|  +-- readme.txt
|
+B-+-- b1.txt
|  +-- b2.txt
|  +-- readme.txt
|
+C-+-- c1.txt
|  +-- c2.txt
|  +-- readme.txt
|
+savedir ←コピー先


ディレクトリ(A,B,C,savedir)があるディレクトリ配下に移動後以下のコマンドを実行。

# find A B C -name "readme.txt" -print | cpio -pdv savedir

Q救出ファイル復元 2の機能について

「救出ファイル復元 2」で画像ファイルJPEGの他にRAWファイル、拡張子(CR2)を復元出来るでしょうか。

キャノンの一眼デジカメを使っているのですが、他の復元ソフトでは、復元出来ませんでした。

Aベストアンサー

Vectorあたりで『ディスク・ファイル復旧』の項目で探せばみつかりそうですが。
要は,"復元ソフトで復元できるファイルがソフトに登録されている拡張子だけしかできない"ことですので,拡張子を選択できる復元ソフトを捜せばいいと思われます。

参考URL:http://www.vector.co.jp/vpack/filearea/win/util/disk/care/

Qシェルスクリプト実行で”そのようなファイルやディレクトリはありません”と出ます。

以下の単純なシェルスクリプトを実行しようとしています。
-------------------
#!/bin/sh
echo ok
-------------------
そのとき、
bad interpreter: そのようなファイルやディレクトリはありません
と出てしまいます。

・which sh で確認すると /bin/sh です。
・Windowsで作ったファイルをFTPのアスキーモードで転送しています。

(ものすごく単純なミスをしてるのかもしれませんが、)
よろしくお願いします。

Aベストアンサー

1行目の「/bin/sh」のうしろにCRが入っていると、このような現象が発生します。
FTPの転送モードが間違いなくアスキーモードになっているか、
転送後のファイルにCRがついていないかなど、再度確認してみてください。

CR以外のコントロールコードや全角スペースなどがついていても似た現象が起こります。
その場合はエラーメッセージが多少異なるはずですが、併せて確認しておくと良いかと思います。

Q削除した画像ファイルの取り出しまたは復元方法

ごみ箱に入れてから削除したファイルの復元方法を教えてください。

以前にも同様の質問をしたのですが、その際に教えていただいた方法で確かにいくつかのファイルは復元することができました。

しかし、一番復元したい画像ファイル(jpeg形式)が復元できません、同時期に同じく削除したファイルは無事に取り出せたのですが肝心のファイルは取り出せません。指定するファイル名、フォルダ名などの間違いはないのですが何が原因で復元できないのか理解できません。

良きアドバイスをいただければ助かります。
宜しくお願いいたします。

Aベストアンサー

こういったファイル復元ソフトを利用してファイルを復活させます。

●FileRecovery(フリーウェア)

消去・欠損したファイルを復元するソフト。
http://www.pcinspector.de/download.htm

●復元(フリーウェア)
http://www.vector.co.jp/soft/win95/util/se192983.html

■FINALDATA(ファイナルデータ)フォトリカバリー3.0(有料)
http://www.finaldata.ne.jp/f_8_3.html

当然ながら復元できる確立は有料ソフトのほうが高いです。

これらを使っても復元できない場合はファイルが上書きされて完全に消えている可能性が高いです。

Q「*.txt」以外の全てのディレクトリ・ファイルを削除したい(Bシェルにて)

rm -rコマンドを使用して、「*.txt」以外の全てのディレクトリ・ファイルを削除したいのですが、正規表現の使い方が分かりません(それ以外を対象にするという方法が分かりません)。
またできれば、「*.txt」以外のディレクトリ・ファイルが存在しなくてもリターンコードは0が返ってきてほしいです。
どのようにすれば良いのでしょうか?
環境は、SolarisのBシェルです。

Aベストアンサー

試していないので不安ですが・・・カレント・ディレクトリーより下にあるファイルを対象にした場合、下記のような find コマンドで可能と思います。

# find . -name *.txt -exec rm {} \;
 rm {} \; の意味は、 find . -name で見つけたファイルを rm コマンドに引き渡して実行するということで、『 {} 』が引き渡されるファイル名に置き換えられ『 \; 』は -exec オプションを使う時のオマジナイです

Q「ウイルス感染ファイル」削除後のシステム復元でどうなる?

ウイルスバスターで幾つかのウイルス感染ファイル発見し全て削除しましたが、感染したファイルはシステムファイルでしたので少し心配でしたが削除しました。
そこで教えて頂きたいのですが、感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?

Aベストアンサー

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライブにOSのインストールディスクを入れておく。
2.「スタート」「コマンドプロンプト」または「ファイル名を指定して実行」で
「sfc /scannow」と入力して「OK」

「Windows XP professional のディスクを入れてください」という表示が出ることがありますがHome Editionであれば「無視」を選んでスキップしてください

>感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?
出来ないことはないでしょうが、あまりお勧めできません。
現在の状態が正常でない。
過去の状態の方が快適に操作できる。
という場合、それがいいかもしれません。
しかし、Windowsの設定というのは非常に広範囲にわたっており、現在と過去を比較して、どちらが適正かを判断するのは容易ではありません。
また、過去の復元ポイントの中には不正な設定が含まれている場合があり、間違って、そのポイントを選択することもあります。
ウィルス対策ソフトのサイトでは一旦復元設定を無効にして、過去の復元ポイントを全て消去することを推奨しています。

>一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?
間違った操作をすると汚染されたファイルが復元されてしまいます。
一旦復元設定を無効にして、過去の復元ポイントを全て消去することで汚染されたファイルは二度と復元しません。

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライ...続きを読む

Q古いファイルやディレクトリを消したい(Linux)

Linux で不要な古いファイルやディレクトリを消したいのですが、
どのようにすればいいのかわかりません。

具体的にはあるディレクトリの中にある
新旧混在となったファイルやディレクトリの中から
1ヶ月以上前に作ったファイルやディレクトリを消すといったことが
したいのです。
もちろんディレクトリの中に新しいファイルがいたら、
親ディレクトリは残すことを考えています。

find で -ctime +7 というオプションをつけて検索すれば
候補が得られるというところはわかったのですが、
ディレクトリもいるので簡単に rm では消せません。
rm -r なんてしたら新しいファイルも消しちゃうので・・・

どうか、お知恵をお貸しください。

Aベストアンサー

Linux なら find で -print0 が使えるし, xargs にも -0 ってオプションがあるはず.
find の -exec では 1つのファイルに対して 1回コマンドを実行するけど, xargs ならカーネルが許す限り長いコマンドを作って実行するので, -exec より xargs の方が fork&exec の回数が少なくなって効率的なはずです.
と思ってちょっと調べてみたけど, Wikipedia で xargs を調べてもらった方がいいかも.

Q復元ソフトのふと感じた疑問 -ファイル名を削除したい-

先日、復元ソフトを使用していたときに感じたことなのですが
(使用ソフトは「復元」です。)
ファイルを復元する際の手順で削除したファイルが検索できますよね。
このファイル検索の時に、HITしないようにファイル名を完全に削除したい場合はどのようにすればいいのでしょうか??

例えば、「●●との秘密旅行001.jpg」のファイルを削除したとします。
その後、復元ソフトで検索をかけるとファイルを復元しなくてもファイル名を見ただけで怪しいファイルとわかってしまいますよね。
復元ソフトの検索で、表示されなくする方法か、別名に変える方法があるのなら教えてください。

Aベストアンサー

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名前を消去したいファイルをクリックするか、名前を消去したい複数ファイルを左クリックしながら選択する→[消去]ボタンをクリック→[OK]をクリック

これで、名前を消せます。しかしながら完璧ではなくて、一部消せないこともあります。
(「DataRecovery」を再起動してもう一度ドライブをスキャンすると消せなかったファイルが表示されます)

参考URL:http://www.vector.co.jp/soft/win95/util/se382922.html

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名...続きを読む

Qfindコマンド/複数の指定ディレクトリ以下にある、古いファイルを削除する処理を自動実行したい

▽やりたいこと
abcde/cache/以下にある、1日以上前にあるファイルを全削除するにはどうすればよいでしょうか。

abcde/cache/ファルダは、複数あります。

まず初めにsshで接続して、実際にファイルを探し、削除してから、cronなるものにチャレンジしようと思っていましたが、一番初めのファイルを探すところで躓きました。

find . -name "cache"だと、消したくない、cacheフォルダまで、
検索されてしまうので、
まずは、複数あるabcde/cache/フォルダを探す方法を知りたいです。

▽step0(ssh)
abcde/cache/フォルダを探す
▽step1(ssh)
abcde/cache/フォルダ以下のファイル全削除
▽step2(ssh)
abcde/cache/フォルダ以下の、1日以上前にあるファイルを全削除
▽step3(cron)
上記をcrondで実行

ヒントだけでもよいので、誰か教えてください。

Aベストアンサー

abcdeの下ってそういう意味でしたか。
それならばこうです。
find . -type f -regex '.*/abcde/cache/[^/]*' -print

実際に消去するには -print を
-exec rm -f \{\} \;
に。
crontabに書くには . ではなくフルパスで。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング