2016-05-25 17 views
0

ファイル名の最初の部分(最初の.まで)がファイルの拡張子(最後の.の後ろ)と一致するすべてのファイルを検索したいと考えています。接頭辞と接尾辞が一致するファイルを見つける

たとえば、次のファイルが一致します

cat.cat 
cat.txt.cat 

一方cat.txt.asmはないでしょう。

findを使ってどうすればいいですか?

+0

はい。これにはfindを使うべきです。しかし、あなたの質問は非常に混乱した形で書かれています。 – khrm

+0

英語が母国語でない場合は、入力と出力を行ってください。 – khrm

+0

申し訳ありませんが、もう一度。スクリプトには、ディレクトリツリーである1つの引数を与えます。それから、すべてのファイルを繰り返して、そのドットの前に拡張子(ドットの後ろ)がその名前と同じものを探してください。 - filename.filename – moodym

答えて

-1

申し訳ありませんが、これは良いです:

あなたは、単にこれを行うことができます:exempleため

は、特定のtoto.tata.toto見つける:

find . -regex ".*\(toto\)[^\/]*\.\1" 

汎用:

find . -regex ".*/\([^./\]*\)[^\/]*\.\1" 
+0

正規表現が間違っています。それは正しいファイルと一致せず、すべてのファイルと一致しません。 –

4

-regexオプションを使用してfind

find -regex '.*/\([^.]+\)\.\(.*\.\)?\1' 
  • .*/は、
  • \(.*\.\)?つまり何がドットで終わる、中央部分に一致する(+は、少なくとも一つの文字が意味)
  • \([^.]+\)が最初のドットまでの任意のデータをキャプチャしたファイルへのパスと一致します全体のことは任意であるが、
  • \1は、最初のキャプチャが
を繰り返していることを意味

はegrepの方言で読みやすくされることがあります。

find -regextype egrep -regex '.*/([^.]+)\.(.*\.)?\1' 
+0

私の目が痛いですが、私はそれが正しいと思います! –

1
find . -type f -iname "*" | awk -F/ '{print $2}' |awk -F. '$1==$NF' 

Or 

    ls -1 | awk -F. '$1==$NF' 
関連する問題