0

「B_」や「D_」などの特別な用語を含むディレクトリ内のディレクトリの名前をテキストファイルに保存する必要がありますが、ディレクトリ全体ではなくファイル名のみを保存する必要がありますが、bash でそれを行う方法がわかりません。出力として以下のようなテキスト ファイルが必要です。

topout_B6_
topout__B6_
topout_B6_
topout_D2_
topout_D2_
topout_D2_
4

1 に答える 1

1

ファイル名が十分に単純な場合は、グロブ展開を使用してそれらのリストを取得できます。このグロブ展開には、親ディレクトリは含まれません (ただし、サブディレクトリは含まれる場合があります)。

files=(*B_* *D_*) #stores an array of file names in $files

パターンがより複雑で正規表現が必要な場合は、findユーティリティを使用できます。

files=($(find . -type f -regex ".*[BD]_?.*))

Find はファイルのフル パスを返すため、先頭のパスを削除する必要があります。これに対する 1 つのアプローチは、パラメーター置換を使用することです。

stripped_files=$(for f in "${files[@]}"; do echo ${f##*/}; done) #iterate over array values

最後に、これをファイルに書き出すことができます。(ヒアストリングスを使用)

>outfile <<<$stripped_files
于 2012-11-22T15:56:32.183 に答える