フォルダの名前を変更する必要がありますが、新しい名前は各フォルダ内のtxtファイルにあります。

フォルダの名前を変更する必要がありますが、新しい名前は各フォルダ内のtxtファイルにあります。

私は助けが必要です。

説明ではなく名前を持つフォルダがたくさんあります。

各フォルダ内には複数行の「info.txt」ファイルがありますが、それらの2つに興味があります。

artist = Name of the Band
name = Name of the Song

次の構造で各フォルダの名前を変更したいと思います。

Name of the Band - Name of the Song

find、grep、および mv コマンドを組み合わせると問題は解決されると思いますが、正しいスクリプトやコマンドを自分で考えるほど経験が不足しています。

よろしくお願いします!

ベストアンサー1

これを行うもう1つの方法です(GNUユーティリティを想定)。このテストが良好な場合は、削除してecho実行してください。

#!/bin/sh -
for f in */info.txt; do
    a="$(grep -Pom1 -- "(?<=^artist = ).*" "$f")"
    n="$(grep -Pom1 -- "(?<=^name = ).*" "$f")"
    echo mv -T -- "${f%/*}" "$a - $n"
done

ここも悪くありません-T。デフォルトの動作はmv、ターゲットが存在しない場合はディレクトリの名前を変更し、存在する場合はディレクトリ全体をターゲットに移動することです。したがって、-Tこの期間中に既存のターゲットがある場合は何も移動されません。

私はすべてのディレクトリが同じ深さにあると仮定し、前のレベルで実行する必要があります。

おすすめ記事