部分パス名を使用したファイル名の変更

部分パス名を使用したファイル名の変更

ディレクトリ名の一部を使用してすべてのログの名前を変更する必要があります。

ログは次のとおりです。

friday13/stack123/FooBar-QA-123/000001.gz
friday13/stack123/FooBar-QA-123/000002.gz
friday13/stack123/FooBar-QA-123/000003.gz

friday13/stack123/FooBar-Stage-456/000001.gz
friday13/stack123/FooBar-Stage-456/000002.gz
friday13/stack123/FooBar-Stage-456/000003.gz

friday13/stack123/FooBar-Prod-789/000001.gz
friday13/stack123/FooBar-Prod-789/000002.gz
friday13/stack123/FooBar-Prod-789/000003.gz

上記のディレクトリの各ファイルの名前を次のように変更する必要があります。

FooBar-QA-123-000001.gz
FooBar-QA-123-000002.gz
FooBar-QA-123-000003.gz

FooBar-Stage-456-000001.gz
FooBar-Stage-456-000002.gz
FooBar-Stage-456-000003.gz

FooBar-Prod-789-000001.gz
FooBar-Prod-789-000002.gz
FooBar-Prod-789-000003.gz

事前に助けてくれてありがとう!

ベストアンサー1

パラメータ拡張の使用部分文字列の削除mv返された各ファイル名のコマンドのターゲット引数を生成するには、次の手順を実行しますfind

find . -type f -name '*.gz' -exec sh -c 'mv -- "$1" "${1%/*}-${1##*/}"' sh {} \;

または同様に、以下を使用しdirnameてくださいbasename

find . -type f -name '*.gz' -exec sh -c '
    mv -- "$1" "$(dirname "$1")-$(basename "$1")"
' sh {} \;

注:常に同様のコマンドを最初に置き換えてmvテストしてください。echo

おすすめ記事