ファイル名の最初の部分(最初の.
まで)がファイルの拡張子(最後の.
の後ろ)と一致するすべてのファイルを検索したいと考えています。接頭辞と接尾辞が一致するファイルを見つける
たとえば、次のファイルが一致します
cat.cat
cat.txt.cat
一方cat.txt.asm
はないでしょう。
find
を使ってどうすればいいですか?
ファイル名の最初の部分(最初の.
まで)がファイルの拡張子(最後の.
の後ろ)と一致するすべてのファイルを検索したいと考えています。接頭辞と接尾辞が一致するファイルを見つける
たとえば、次のファイルが一致します
cat.cat
cat.txt.cat
一方cat.txt.asm
はないでしょう。
find
を使ってどうすればいいですか?
申し訳ありませんが、これは良いです:
あなたは、単にこれを行うことができます:exempleため
は、特定のtoto.tata.toto見つける:
find . -regex ".*\(toto\)[^\/]*\.\1"
汎用:
find . -regex ".*/\([^./\]*\)[^\/]*\.\1"
正規表現が間違っています。それは正しいファイルと一致せず、すべてのファイルと一致しません。 –
-regexオプションを使用してfind
:
find -regex '.*/\([^.]+\)\.\(.*\.\)?\1'
.*/
は、\(.*\.\)?
つまり何がドットで終わる、中央部分に一致する(+
は、少なくとも一つの文字が意味)\([^.]+\)
が最初のドットまでの任意のデータをキャプチャしたファイルへのパスと一致します全体のことは任意であるが、\1
は、最初のキャプチャがはegrepの方言で読みやすくされることがあります。
find -regextype egrep -regex '.*/([^.]+)\.(.*\.)?\1'
私の目が痛いですが、私はそれが正しいと思います! –
find . -type f -iname "*" | awk -F/ '{print $2}' |awk -F. '$1==$NF'
Or
ls -1 | awk -F. '$1==$NF'
はい。これにはfindを使うべきです。しかし、あなたの質問は非常に混乱した形で書かれています。 – khrm
英語が母国語でない場合は、入力と出力を行ってください。 – khrm
申し訳ありませんが、もう一度。スクリプトには、ディレクトリツリーである1つの引数を与えます。それから、すべてのファイルを繰り返して、そのドットの前に拡張子(ドットの後ろ)がその名前と同じものを探してください。 - filename.filename – moodym