REGEXを使用してネストされたディレクトリ内のファイルを検索する

REGEXを使用してネストされたディレクトリ内のファイルを検索する

だからこの構造のフォルダがあります。

topperlayer
    ├── layerone
    │   └── testfile
    └── layertwo

layeroneと同様に、layertwo1つのレイヤーの下に多くのディレクトリがあり、サブディレクトリもあります。

レイヤーの1つまたはレイヤーのサブディレクトリにファイルがありますtestfile

testfileREGEXを使用して位置を取得できますか?

それはまるで-

#!/bin/bash
echo $(ls topperlayer/<REGEX>/testfile)

os.walkすべてのディレクトリとサブディレクトリで作業を実行して、Pythonでファイルを見つけることができます。しかし、シェルでこれを行いたいと思います。正規表現

助けやアドバイスをいただきありがとうございます。

PS - 私は正規表現について何も知りません。

答え1

testfile説明で説明されているように構成ファイルでファイルパスを指定する必要がある場合は、まずその場所を知っておく必要があります。

2つの解決策があります。

  1. find topperlayer -type f -name testfile
    

    topperlayerこれにより、名前付き一般ファイルの前にあるディレクトリとすべてのサブディレクトリが検索されますtestfile。次に、見つかった各ファイルのパス名を印刷します。

  2. shopt -s globstar
    printf '%s\n' topperlayer/**/testfile
    

    これにより、まず.NETglobstarのシェルオプションが有効になりますbash。これにより、**同様に機能しますが、「再帰的」一致を使用する*ワイルドカードパターンを使用できます。これにより、printf指定されたワイルドカードパターンに一致する各名前が印刷されます。

上記の両方のオプションはパス名を印刷します。すべて testfile以下にtopperlayer

ファイルへの適切なパス名を見つけたら、それを構成ファイルに追加します。

答え2

findあなたは友達ですか?

find topperlayer -path 'glob/testfile'

globをパターン(正規表現ではない)に置き換えます。start*middle*end

正規表現が必要な場合は、オプションを使用します。-regex

find topperlayer -regex 'regex/testfile'

関連情報