• ベストアンサー

~以外を削除する場合(rmコマンド)

linuxのコマンドで ~以外のファイル、ディレクトリを全て削除したい時は どのような記述をすれば良いのでしょうか? シェルスクリプトではなくrmコマンド1つで削除したのいですが… 例: tar以外のファイル・ディレクトリを    すべて削除したい場合など どなたかご存知の方がいらっしゃったら 教えてください。よろしくお願い致します。

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

  • ベストアンサー
  • hchonan
  • ベストアンサー率79% (19/24)
回答No.1

rm コマンドのみという訳にはいきませんが基本的なコマンドを組み合わせると実現可能と思います。 「名前が tar で終わるもの以外のファイル・ディレクトリを削除する」場合だと ls | grep -v -E 'tar$' | xargs rm -r となります。 ファイルの一覧を取得し ( ls ) 'tar'で終わるもの以外を抽出し ( grep ) その結果を rm -r の引数に指定して実行 ( xargs ) という流れです。 ファイルを削除するような操作については失敗するとダメージが大きいので、事前にテストして動作を確認すると良いとおもいます。また rm -r -i としてそれぞれのファイルについて、削除の問い合わせをするのも有効です。

miho_kumi
質問者

お礼

正規表現(たとえば ^ )を使ってはやっぱり無理なんですね。ありがとうございました!勉強になりました。

関連するQ&A

  • RHL7で多数のファイル削除(rm)方法

    Red Hat Linux7でHD容量が足りなくなったので、新しいHDをフォーマット後あるディレクトリにマウントしました。 この後、古いHD内のファイルを全て削除しようと思い、rm -r [ディレクトリ名]を実行しましたが、消すファイルを聞いてきて、いちいちy、リターンを押さなければなりません。数が多いので面倒です。 良い方法を教えてください。 rm -rは強制削除だとおもうのですが‥‥。 削除コマンドなので、ビビッています。 RHL7の素は、できるlinuxサーバという本に添付されていたものです。 よろしくお願いします。

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

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

  • シェルスクリプトでファイル削除したい

    シェルスクリプト初心者です 今回、Linuxサーバ側にある複数のファイルを削除する 必要が出てきました このため、シェルスクリプトを書いて複数(2000程度) のファイルを削除しようとして試験をしています 試験のLinuxサーバ側の/root の中にfile1,file2・・・ 等々を置いています そこに次のようなスクリプトを記載して ファイルが置かれている場所と同じ/rootに置いて実行させるのですが ************** スクリプト ******** #!/bin/sh echo "start" # # rm F1010002.JPG rm F1010003.JPG rm F1010004.JPG echo "end" ****************************** 下記のようなエラーが出ます ****************************************** start rm: cannot lstat `F1010002.JPG\r': そのようなファイルやディレクトリはありません rm: cannot lstat `F1010003.JPG\r': そのようなファイルやディレクトリはありません rm: cannot lstat `F1010004.JPG\r': そのようなファイルやディレクトリはありません end ****************************************** サーバ側にSSHで入って、 # rm F1010002.JPG とひとつひとつ打鍵していくとファイルは削除されます スクリプトの間違い等あるのでしょうか 教えていただければ幸いです なお、ファイル数2000件程度のスクリプトを記載する方法は 別のソフトを利用して作成できるので・・・その件はいいのですが・・・

  • Linuxシェルスクリプトを新しいコマンドにしたい

    Linux初級者です。よろしくお願いします。 OSにFedora Core 10, シェルにtcshを使用しています。 よく使用するコマンドを、まとめて一括で実行するように、 新しいコマンドを作成したくて、次のようなことをしていたのですが (1)ホームディレクトリにmybinというディレクトリを作成してPATHを通す。 (2)newbin1という以下の内容のシェルスクリプトを作成して、~/mybinに置いておく。 ================================== #!/bin/tcsh -f date #実行コマンド例1 echo $PATH #実行コマンド例2 ================================== (3)chmodコマンドでファイルに実行権限を与える。 上記のような方法で、作成したシェルスクリプト(newbin1)を PATHの通ったディレクトリ(~/mybin)に置いて、 > newbin1 とコマンドを呼び出しても、 "newbin1: コマンドが見つかりません" というエラーになってしまいます。 > which newbin1 とすると、ちゃんとファイルのパスが表示されるのですが、 *********************************************************** 自分で作成したシェルスクリプト(newbin1)を、 新しいコマンドとして認識させるにはどのようにすればよいのでしょうか。 また、そもそもシェルスクリプトを新しいコマンドにすることが 不可能だったりするんでしょうか? ************************************************************ 一括で実行したいコマンドが多い場合に、aliasで割り当てるのが大変なので、 できればaliasコマンドは使わずにできる方法を探しています。 基本的な質問かもしれませんが、よろしくお願い致します。

  • ユーザの利用コマンドを制限

    SuSE Linux 9.3 を使っております。 今回はあるユーザAに対してSSHによるログインのあとにホームディレクトリにあるシェルスクリプトだけを実行させるようなアカウントを作成したいのですが、そういったことは可能でしょうか。 また特定のユーザに対して「ls」は使わせるけど「rm」は使わせないうような細かな調整は可能でしょうか。 ※今回のユーザAに実行させたいシェルスクリプトは特定のファイルを特定のファイルにコピーして古いのは削除してしまうというシンプルなものです。

  • フォルダが削除できない

    こんばんは。 Windowsに共有ディレクトリを作成し、専用のユーザーとパスワードも作成し、Linuxからmountしました。 (mount後の読み書きは正常にできております) あるプロジェクトのバックアップをしたいと思い、シェル作成とテストをしながら、上記の共有フォルダにファイルやディレクトリをコピーしたり削除したりしておりました。 で、突然あるディレクトリだけが削除できなくなってしまいました・・・。 (LinuxからもWindowsからも削除できません) rmdirをすると、「ディレクトリが空ではありません」と怒られます。 (ls -laで見ても空です) rm -rfでも同じメッセージで削除できません・・・。 (rmなのに???) 削除できないフォルダにファイルを作成したりは、何故かできます。 フォルダを削除した後、ハードリンクの数が「0」です・・・。 (上記エラーメッセージ表示後に確認しました) なんですかね?これ。 今後はtarしてからWindows側にコピーする予定ですので、このフォルダ (実際には、ちょっとパスが深いので、マウントポイント以下は全て) を削除してしまいたいのですが・・・。 オーナーはrootです。 chmodは効きません・・・。 (777指定しても反映されてない、まぁroot作業なので関係ないですが・・・) Linuxに詳しい方、ご教示くださいますよう、よろしくお願い致します。

  • rm,cpコマンドの置き換えについて

    linux初心者のため、困っています。 組み込みで、ディレクトリの削除とコピーを行いたいのですが、置き換えができません。どなたか教えてください。 コマンドでは以下のようになるのですが… (1)rm -r -f /ディレクトリ名/ (2)cp -r -f /元ディレクトリ名/ /先ディレクトリ名/ 無知で申し訳ありませんが、よろしくお願いします。

  • rmコマンドについて

    rm -r dir_hoge ※dir_hoge = フォルダ名 -- dir_hoge |-- 1.dat `-- 2.dat このような場合 rm: descend into directory 'dir_hoge'? y rm: descend into directory '1.dat'? y rm: descend into directory '2.dat'? y このように、毎回「y/n」の質問をされます。 数千ものファイルがあった場合「y」を1000回おさなければならないのでしょうか? 簡単なものがあれば宜しくお願いします。 目的は「ディレクトリを簡単に削除したい」です。

  • シェルスクリプトの自動化で動作が変なのですが・・・

    いつも大変お世話になります。 シェルスクリプトでtarコマンドを書き、このファイルをcrontabで自動化しております。 設定した時間になるとcrontabが実行され、ファイルが生成されるのですが、ファイル容量が少なく、tarコマンドがきちんと実行されていない様なのです。 あるディレクトリをまるごと圧縮しているのですが、容量は1GB程あり、これを tar czvf /directory_name1/file_name1.tar.gz /directory_name2/ というコマンドで圧縮しております。 直接このコマンドを実行するとちゃんと圧縮され、約940MBの容量になります。しかし、crontabでシェルスクリプトを実行すると45バイトのファイルが生成されて終ってしまいます。 なぜなのか、さっぱり原因が分かりません。 どなたかご教授の程、何卒、宜しくお願い致します。

  • bashにてログを書き出すコマンド

    未経験で小さいシェルスクリプトを組んでいます。 バックグラウンドで動いているので、rmやmvをした時に何らかのメッセージがでてスクリプトがとまらないようにログ吐き出しをしたいのです。 それで、先人の書いたスクリプトを部分コピーしながらうまくやっていたのですが、ちゃんと意味を知らなければと思って質問しています。 たとえば rm $ファイル 2>> $ログファイル 1>&2 という記述がありまして、 2>> というのがどういう意味を持つのかが分かりません。 1>&2はググったところ、書き出しの順番のようですが、数字と&が具体的に何を意味しているか分かりませんでした。 bashのこういったコマンド群で参考になるサイトをご存じの方は教えていただけませんでしょうか。 また、簡単に上述の意味を教えていただけるとうれしいです。 よろしくお願いします。