将嵌套目录中的文件移动到 dest 文件夹但保留基本名称并放弃文件夹结构?

将嵌套目录中的文件移动到 dest 文件夹但保留基本名称并放弃文件夹结构?
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扩展名

相关内容