私がするなら:
$ ls -R
.:
4Shared/ Cloud/
./4Shared:
UFAIZLV2R7.part3.rar
./Cloud:
UFAIZLV2R7.part2.rar.part
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part4.rar.part
ファイルを一覧表示したい場合は、.rar
次を使用します。grep.rar.part
、それも私が望んでいないファイルを表示します。
私はfind
またはls **/*.rar
で説明されているようにこの問題を解決しています。このスレッドうまくいきますが、これが可能かどうかを知りたいですgrep
。
私は以下を試しました(考えEOL
):
ls -R | grep ".rar\n"
結果がない
問題は、grepingが見つかったかどうかを調べることです。行末で、しかし、よくわかりません。
ここで役に立ちますか?
答え1
アンカーポイントは$
線の端に一致します。
ls -R | grep '\.rar$'
find
この目的にも使用できます。
find . -name '*.rar'
答え2
あなたの質問に加えて、.rar
「.rar」だけでなく、.
.rar(含む)より前のすべての文字と一致することに注意してくださいrar
。この場合は問題にならないかもしれませんが、正規表現.
ではエスケープする必要があります。
ls -R | grep "\.rar$"
答え3
grep
単語の境界から始めるように文字列検索を指示することもできます。.
(a) の間にはそのような境界がある。馬ではない文字)とr
(a言葉特徴)。実装に応じて、grep
単語境界演算子は、または(単語の左境界のみ)または(右)にすることが\b
できます。\<
[[:<:]]
\>
[[:>:]]
$ ls -R | grep '\brar$'
はい
このサンプルデータがあるとしましょう。
$ ls -1
afile.rar
xrar
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part2.rar.part
このコマンドは拡張子です.rar
。
$ ls -R | grep '\brar$'
afile.rar
どのように動作しますか?
メタ文字
\b
はカラットやドル記号と同様にアンカーです。 「単語の境界」という位置で一致します。この一致期間は 0 です。
これがうまくいかない状況
これらの名前のファイルが存在する場合、そのファイルもblah-rar
検出されます。
$ ls -R | grep '\brar$'
afile-rar
afile.rar
英数字以外の文字は通常境界文字と見なされ、この方法ではスキップするためです。
答え4
ただし:
ls -1R -I"?" -I"??" -I"???" -I"*[!.][!r][!a][!r]"
grep
まったくそうする必要はありません。
メモ:上記の方法はうまくいきますが…それでも起こります。少なくとも afile-rar
理由がわからない。ここに残しますが、誇りに思っていません。とにかく他の人が言ったように:
find . '*.rar'