どのようにFIND-Eをフィルタします。ファイル名の先頭と末尾を使用してREGEXしますか?


0

私は現在ファイルのリストを取得するためにこのコマンドを使っています:

find -E . -regex '.*\.(jpg|jpeg|png|gif|pdf)'

そのコマンドを使用して、私はこのリストを取得します:

今:

documentA.pdf
documentB.jpeg
001documentC.png
...

私の目的はこのリストをフィルタリングすることなので、私は3つの整数で始まり、以前に設定された拡張子で終わるファイルだけを取得するでしょう。

目標:

001documentC.png

コマンドを微調整する方法 find -E . -regex だから私はそのような行動を得るだろうか?私は正規表現文字列を作成しました: ([0-9][0-9][0-9]).*\.(jpg|jpeg|png|gif|pdf)、でテスト済み regexPal.com しかし、findコマンドではうまく動作させることができませんでした。


あなたはまだそれの周りにスピーチマークを置いていますか? `(([0-9] [0-9] [0-9])。* \。(jpg | jpeg | png | gif | pdf) '?これで明らかに悪いことは何もわかりません…
djsmiley2k

の珍しい行動のように見えます find。なにがあなたの find バージョン?
iBug

何が -E オプションはどういう意味ですか?私と一緒には動作しません find
simlev

による man find パス全体がチェックされるので、 find . -regextype awk -regex '.*/[0-9][0-9][0-9].*\.(jpg|jpeg|png|gif|pdf)' 私のために働きます。
simlev

私の端末ではうまくいきませんでした。私はMacOをzshを使っています。それがその理由かもしれません。うまくいくはずだったもう一つの例はそうではなかった、それが私がzshに責任があると思う理由です。
Yann-Reun

回答:


0

おかげで完璧な解決策が見つかりました このスタックオーバーフローの質問

find -E . -iregex '.*/*\.(jpg|png|eps|gif)'

テスト:

$ touch documentA.pdf documentB.jpeg 001documentC.png 0documentD.eps 0000documentE.pdf
$ find -E . -iregex '.*/[0-9]{3}.*\.(jpg|png|eps|gif)'

./001documentC.png

これは私が私のコメントで先に投稿したフィルタと同等です。 '.*/[0-9][0-9][0-9].*\.(jpg|jpeg|png|gif|pdf)' 私が指摘したところでは、パス全体がフィルタリングされています(したがって、ファイル名の前にスラッシュを追加する必要があります)。おそらくフィルタではなく行全体をコピー/貼り付けしたためと考えられます。オプション -regextype awk (GNU find )相当 -E (MacOSの場合 find
simlev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.