重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

 Unixで、カレントディレクトリにたくさんのファイルがあって、
そのうちの一つとか二つのファイルのみ残して あとはみんな削除したいとき、
どのようにすればよいのでしょうか。

rm *
とすると、みんな消えてしまいます。

もっとも、私の環境では .cshrcに
alias rm 'rm -i' 
と書いてあるため、削除するときにいちいち確認を取ってきます。
そのときに 削除しないものには n(no)と入力すればよいのですが、
ファイルがたくさんあると いちいち見るのも面倒になって、
y(yes)をどんどん入力してしまって削除してしまう恐れがあります。

コマンドを入力するときに 削除しないものを指定できないでしょうか。

Unixの初級者なので、そのおつもりでご解答いただくとうれしいのですが。。。

A 回答 (1件)

* などのワイルドカード展開は rm ではなくシェルでやっているので、


rm コマンドで簡単に実現する方法はありません。
私がやっている方法は、以下のようなものです。

(1) ls * > /tmp/filelist で、カレントディレクトリのファイル名一覧を
  /tmp/filelist に作る。
(2) vi /tmp/filelist で、削除したくないファイル名の行を消す。
(3) rm `cat /tmp/filelist` を実行する。

これで、お望みのことができます。
alias rm 'rm -i' しているとファイル名の確認を取ってくるので、これを
避けるには、(3) で \rm `cat /tmp/filelist` のように、rm の前に \ を
つけると alias が無効になり、一気に消すことができます。

もっと安直には、

(1) mv 消したくないファイル /tmp
(2) \rm *
(3) mv /tmp/消したくないファイル .

という方法もありますね。
    • good
    • 0
この回答へのお礼

おっしゃるとおりにしたら、私の希望どおりにできました。
ありがとうございました。

ご回答を見た私ははじめ、(3)で、
\rm の後の cat ~~ を '(シングルクウォーテーション)で囲ってしまってできなかったのですが、
ご回答どおりにちゃんと ` ` で囲ったらできました。

お礼日時:2001/08/12 12:07

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