小编How*_*ing的帖子

操作从 find 命令通过管道传输的文件名

我对 Bash 比较陌生,我正在尝试做一些表面上看起来很简单的事情 - 在目录层次结构上运行 find 以获取所有 *.wma 文件,将输出通过管道传输到一个命令,在那里我将它们转换为 mp3 和将转换后的文件另存为 .mp3。我的想法是该命令应该如下所示(我已经放弃了音频转换命令,而是使用 echo 进行说明):

$ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3
Run Code Online (Sandbox Code Playgroud)

据我了解, -print0 arg 将让我处理带有空格的文件名(其中许多都是音乐文件)。然后我期望(作为 xargs 的结果)在 f 中捕获来自 find 的每个文件路径,并且使用从字符串末尾匹配/删除的子字符串,我应该用 mp3 回显原始文件路径扩展名而不是 wma。但是,我看到的不是这个结果,而是以下内容:

*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
...
Run Code Online (Sandbox Code Playgroud)

所以我的问题(除了特定的“我在这里做错了什么”),是这样 - 在字符串操作操作中需要对管道操作结果的值与变量赋值的结果进行不同的处理?

shell bash find recursive filenames

10
推荐指数
2
解决办法
1万
查看次数

标签 统计

bash ×1

filenames ×1

find ×1

recursive ×1

shell ×1