テキストファイルの名前に基づいてファイル名を変更するには?

テキストファイルの名前に基づいてファイル名を変更するには?

1つのフォルダに複数のファイルがあります。特定の順序でリストされたファイル名(拡張子なし)を含むcsvファイルもあります。ファイル名の先頭にテキストファイルリストの場所を含むようにフォルダのファイル名を変更したいと思います。

つまり、私のフォルダには次のものが含まれます。

aaa.txt, bbb.txt, ccc.txt

ファイル名.csvには次のものが含まれます。

ccc
aaa
bbb

私が得たいものは:

1_ccc.txt, 2_aaa.txt 3_bbb.txt 

Bashでこれを行うことはできますか?

ベストアンサー1

for i in *.txt
do line=$(grep -nx -m 1 -- "${i%%.*}" filename.csv | cut -f 1 -d ':')
name=${line}_${i}
mv -- "$i" "$name" 
done

説明する

"${i%%.*}": Kusalanandaが提案したように値を取得し、$i値の尾からパターンを削除します(追加情報.*パラメータ拡張)

grep -nF --

  • -x全行と一致
  • -m 11つの一致する行の後にファイルの読み取りを停止します(grepファイルが非常に長い場合はすべての行を読み取るのを防ぐため)。
  • --オプションの終わりを示すために使用されます(詳細- シェルから)

  • -n次の形式で、行自体の代わりに行番号を返します。

    2:aaa 3:bbb 1:ccc

cut -f 1 -d ':':上記の結果から区切り文字を含むフィールド1を抽出します。

おすすめ記事