我想做的只是简单地发出这个命令
find . -name "*flac" -exec oggenc -q 7 {} \;
将 oggs 吐到我选择的任何文件夹中。我尝试将其放在~/vorbis
命令末尾,但出现谓词错误:
find: possible unquoted pattern after predicate `-execdir'?
我已经浏览过“查找手册页”,我知道{}
末尾的-q 7
是用来查找flac
文件的。所以这让我陷入了困境。
有人知道我必须在该命令中添加什么才能将 oggs 输出到所选文件夹中吗?
感谢您的阅读和帮助。
顺便说一句,我确实尝试过:
find . -name "*flac" -exec oggenc -q 7 ~/vorbis {} \;
但这只会将 oggs 吐到带有 flacs 的文件夹中。不是~/vorbis
文件夹。我试图保留文件夹名称和结构,将其输出到我选择的文件夹中(~/vorbis
)。我并不要求完整的剧本。我只是简单地要求有人解释我如何才能实现我想要实现的目标。
谢谢你!
答案1
使用子 shell,我们可以更改文件名并执行其他命令,确保输出到达我们想要的位置。
mkdir -p ~/vorbis
find . -name "*flac" -exec sh -c 'oggenc -q 7 "$1" -o ~/vorbis/"${1%.*}".ogg' _ {} \;
...使用 flac 模块打开:FLAC 文件阅读器将“./summerbreezes.flac”编码为“/home/k/vorbis/./summerbreezes.ogg”,质量为 7.00 [ 99.0%] [ 剩余 0m00s] -
完成编码文件“/home/k/vorbis/./summerbreezes.ogg”
文件长度:1m 11.0s 经过时间:0m 01.3s 速率:55.0760 平均比特率:198.3 kb/s
ls ~/vorbis
alsowe.ogg christmascard.ogg love1.ogg themanyone2.ogg yourmom.ogg
An_Open_Door.ogg GEDC4177.ogg summerbreezes.ogg winning.ogg
答案2
如果您不关心通向的路径,则myfile.flac
可以使用一种-execdir
技巧将它们全部吐到一个目录中。
find
-execdir
在执行命令之前,将更改文件的目录。它还更改{}
为以./
.
find . -name '*.flac' -execdir oggenc -q 7 -o ~/vorbis/{}.ogg {} \;
因此对于这个例子,当它发现./path/to/myfile.flac
它时就会执行:
cd ./path/to
oggenc -q 7 -o ~/vorbis/./myfile.flac.ogg ./myfile.flac
(笔记:至少对于 GNU findutils 来说,
./myfile.flac
是真的它找到的文件或符号链接的完整路径,而不是相对路径,但这对于OP的问题来说应该不重要)