「rm -rf filename [co]」コマンドで[co]はどういう意味ですか?


16

私が2つのファイルを持っているとしましょう/tmp

root@ubuntu:~# touch /tmp/hello.{pyc,py}

root@ubuntu:~# ls /tmp/
hello.py  hello.pyc

次に、rm -rf[co]オプションを指定してコマンドを実行します

root@ubuntu:~# rm -rf /tmp/hello.py[co]

root@ubuntu:~# ls /tmp/
hello.py

誰かがここで何が起こっているのか説明してもらえますか?[co]パラメーターは何ですか?他の拡張機能でどのように機能させることができますか?私が持っているfoo.jsと言って、foo.coffeeファイルrm -rf /tmp/foo.coffe[co]を削除するようなことをすることができます/tmp/foo.jsか?


8
-rfこれらはディレクトリ(--recursive)でも書き込み不可(--force)でもないので、必要はありません。
deltab

13
必要は-rfなく、ルートとして物事を行う必要もありません。特に問題のものが関係するならrm -rf
テルドン

Guys、問題を説明するためのサンプルコマンドです。実際の質問は[co]シェルグロブについてでした。ありがとう。
aneeshep

8
@aneeshep誰かが銃の樽を見下ろし、それをきれいにする方法を尋ねている場合、最初に樽を見下ろすことについて警告するか、それをきれいにする方法を伝えますか?
ダンカンXシンプソン

回答:


34

[co]パラメータではありませんrm、それはだ-コマンドシェルグロブパターンにマッチしたセットから単一の文字に等しい[co]-言い換えれば、それはどちらか一致するco、ファイル名の末尾。からman bash

[...]  Matches any one of the enclosed characters

両方に一致するためfoo.coffeefoo.js、サフィックスがまったく共通部分文字列が含まれていないので、最高のあなたは、IS行うことができますfoo.*一致しますどんなで始まるファイル名をfoo.代わりに使用することができブレース展開などを

rm foo.{coffee,js}

うん bashの基本的な概念を逃しました;)。ありがとう:)
aneeshep

7
パターンを検索するように[abc]*なりのファイルを検索しながら、{}しません。/ tmpに移動しecho nya[ab]; echo nya{a,b}touch nyaaを何度も入力しますecho nya[ab]; echo nya{a,b}
Sanya_Zol

16

これはパラメーターではなく、文字のコレクション(または「シェルグロブ」)です。これは同じです:

rm -rf /tmp/hello.py[co]

と同じです

rm -rf /tmp/hello.pyc
rm -rf /tmp/hello.pyo

同様の...

rm -rf /tmp/hello.py[c-o]

何かを削除するだろう/tmp/hello.pycまでを含む/tmp/hello.pyoASCII順序以下。

rm -rf /tmp/hello.py[ab][cd]

削除します...

rm -rf /tmp/hello.pyac
rm -rf /tmp/hello.pyad
rm -rf /tmp/hello.pybc
rm -rf /tmp/hello.pybd

たとえば、私たちはのような何かを行うことができ、foo.jsはとfoo.coffeeファイルがrm -rf /tmp/foo.coffe[co]削除するの/tmp/foo.js

かなり派手な方法を作成できますが、これらの2つのファイルについては、それぞれ1つのコマンドで削除するだけです。これらの2つのファイルにできるだけ近づける別の例...

rm /tmp/foo.[cj]*

このようなファイルを削除します...

rm /tmp/foo.c*
rm /tmp/foo.j*

したがって、これらの2つのファイルだけでなく、はるかに多くのものが含まれます。


2
私が誤解していない場合はrm -rf、すべての一致で1回の呼び出しが行われ、それぞれ1回の一致で呼び出しは多くありません。

1
はい。しかし、私が追加したrmの意図ではありません。これらは、同等のものとして入力するために必要なものを示すためのものです;-)
リンツウィンド

1

これはシェルグロブで、ワイルドカード*?... in bash に似ており、ファイル名パターン*.[co].cまたはで終わるすべてのファイル名に一致します.o

違い*.[co]*.c *.oまたは*.{c,o}2つの後者のパターンがダミーに拡大することで*.o何の場合.o、ファイルがディレクトリに存在しない一方で、*.[co]バージョンはしません。

シェルグロブは、大文字と小文字を区別しない方法でファイル操作を行うのに役立ちます。あなたがその終わりを含むファイル名を持つファイルの束がある場合たとえば、jpgJPGJpgJPgなど、...そしてあなたがそれらのすべてを削除したい、あなたが行うことができます。

rm *.[Jj][Pp][Gg]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.