私が行った場合:
$ 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
ファイルも表示されます。私の望みは何ですか。
this thread で指示されているように、find
またはls **/*.rar
を使用してこれを解決していますが、それらは正常に機能しますが、 grep
を使用してください。
私は試しました(EOL
について考える):
ls -R | grep ".rar\n"
結果なし。
問題は、行の終わりで手探りが見つかった場合が検出されたかどうかにあると思いますが、よくわかりません。
ここで何か助けてください。
$
アンカーは行の終わりと一致します。
ls -R | grep '\.rar$'
これにはfind
を使用することもできます。
find . -name '*.rar'
質問に加えて、.rar
は「.rar」だけでなく、rar
の前のすべての文字(.
を含む)にも一致することに注意してください。この場合、おそらく問題ではありませんが、.
は正規表現でエスケープする必要があります。
ls -R | grep "\.rar$"
grep
に、Wordの境界から始まる文字列を探すように指示することもできます。 .
は、このような境界の1つです。
$ 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
は、キャレットやドル記号のようなアンカーです。 「単語境界」と呼ばれる位置で一致します。この一致は長さがゼロです。
blah-rar
という名前のファイルがある場合、これらも検出されます。
$ ls -R | grep '\brar$'
afile-rar
afile.rar
これは、通常、英数字以外の文字は境界文字と見なされるため、このアプローチをすり抜けてしまうためです。
上記に従っても問題が解決しない場合は、行末が原因である可能性があります。修正するには、次のようにします:dos2unix pr0n.txt
して、もう一度grep
を実行してください。
ただ:
ls -1R -I"?" -I"??" -I"???" -I"*[!.][!r][!a][!r]"
grep
はまったく必要ありません。
注:上記は機能しますが、少なくともが得られることを除いて、少なくともafile-rar
と私は理由がわかりません。ここに残しておきますが、誇りに思いません。いずれにせよ、他の人が言ったように:
find . '*.rar'