親ディレクトリに基づいてファイル名を変更するには、find / xargsコマンドを使用しますか?

親ディレクトリに基づいてファイル名を変更するには、find / xargsコマンドを使用しますか?

次のディレクトリ構造があります。

Project/
  |
  +--Part1/
  |    |
  |    +--audio.mp3
  |
  +--Part2/
  |    |
  |    +--audio.mp3
  |
  +--Part3/
  |    |
  |    +--audio.mp3
...

Part1.mp3、Part2.mp3などのファイルにしたいです。

各フォルダには1つのファイルしか含まれていないため、ファイルが破損したり、同じ名前の複数のファイルを処理したりする危険はありません。

find一種の/xargsコマンドプラスとを使用してcutこれを行うことができるようですが、mv実際にコマンドを設定する方法がわかりません。

ベストアンサー1

これらの例はすべてのPOSIXシェルで実行でき、外部プログラムは必要ありません。

これにより、Part * .mp3ファイルがプロジェクトディレクトリと同じレベルに保存されます。

(cd Project && for i in Part*/audio.mp3; do echo mv "$i" ../"${i%/*}".mp3; done)

これにより、プロジェクトディレクトリにPart * .mp3ファイルが残ります。

for i in Project/Part*/audio.mp3; do echo mv "$i" ./"${i%/*}".mp3; done

これらのソリューションはシェルを使用してpattern matching parameter expansion新しいファイル名を生成します。

 ${parameter%word}     Remove Smallest Suffix Pattern.  The word is expanded
                       to produce a pattern.  The parameter expansion then
                       results in parameter, with the smallest portion of
                       the suffix matched by the pattern deleted.

おすすめ記事