【发布时间】:2017-04-01 17:11:41
【问题描述】:
我有一些 wav 文件。对于这些文件中的每一个,我想创建一个具有相同名称的新文本文件(显然 wav 扩展名被替换为 txt)。
我第一次尝试这个:
find . -name *.wav -exec 'touch $(echo '{}" | sed -r 's/[^.]+\$/txt/')" \;
哪个输出了
?
然后 find 在我按下 y 键后抱怨:
find: 'touch $(echo ./music.wav | sed -r 's/[^.]+$/txt/')': 没有这样的文件或目录
我发现我正在使用管道并且实际上需要一个外壳。然后我跑了:
find . -name *.wav -exec sh -c 'touch $(echo "'{}"\" | sed -r 's/[^.]+\$/txt/')" \;
谁做的。
实际上,我并没有真正了解内部正在做什么,但我猜每个文件都会生成一个 shell,对吧?我担心这会耗费大量内存。
那么,如果我需要在一大堆文件和目录上运行这个命令怎么办!?
现在有没有更有效的方法来做到这一点?
基本上我需要转换当前文件的名称并提供触摸命令。
谢谢。
【问题讨论】: