入れ子になったディレクトリからターゲットフォルダにファイルを移動しますが、デフォルトの名前を保持してフォルダ構造を削除しますか?

入れ子になったディレクトリからターゲットフォルダにファイルを移動しますが、デフォルトの名前を保持してフォルダ構造を削除しますか?
find $(MY_DIR)/source -type f -name "*.wav3" -print0 | \
xargs -0 -P $(NPROC) -n1 -I {} \
mv {} $(MY_DIR)/sound/{}.wav

上記のすべての.wav3ファイルを見つけてサウンドフォルダに移動しようとしましたが、デフォルトの名前を保持するために出力ファイルを切り取る方法がわかりません。

$(MY_DIR)/source/deeply/nested/file/song1.wav3

$(MY_DIR)/source/deeply/nested/file/song2.mp3.wav3

次に移動します。

$(MY_DIR)/sound/song1.wav

$(MY_DIR)/sound/song2.wav

スクリプトをどのように調整できますか?

答え1

find++を台無しにすることなく、xargs単にmv切り替えてzsh実行するだけです。

autoload -U zmv
zmv -n '$(MY_DIR)/source/**/(*).wav3' '$(MY_DIR)/source/${1%%.*}.wav'

仕組み:

  • まずzmvロードします。autoload
  • -n引数は実行を防ぐことです。結果が満足な場合は、このオプションを削除してください。
  • 二重アスタリスクは、**すべてのネストされたディレクトリと一致します。
  • (*)何でも一致し、結果を$1変数に保存する
  • ${1%%.*}最初の点の後に続くすべての文字を削除します。
  • .wav最後に拡張を追加

関連情報