首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归地将msgfmt命令应用于具有find -exec的目录中的所有.po文件。

递归地将msgfmt命令应用于具有find -exec的目录中的所有.po文件。
EN

Ask Ubuntu用户
提问于 2013-04-10 16:00:07
回答 1查看 2.8K关注 0票数 8

我有以下目录结构:

代码语言:javascript
复制
webiste/
    locale/
        en/
             LC_MESSAGES/
                     translation.po
        de/
            LC_MESSAGES/
                     translation.po
        fr/
            LC_MESSAGES/
                     translation.po

我使用find命令访问所有.po文件,并将msgfmt命令应用于它们。

所以当我运行这个命令时:

代码语言:javascript
复制
find . -name \*.po

输出是

代码语言:javascript
复制
./locale/fr/LC_MESSAGES/translation.po
./locale/de/LC_MESSAGES/translation.po
./locale/en/LC_MESSAGES/translation.po

正如我所期望的,但现在我在添加以下内容时:

代码语言:javascript
复制
find . -name \*.po -exec msgfmt "{}" \;

它没有输出任何内容,也没有创建它应该创建的.mo文件(如果我单独对每个文件执行msgfmt命令,就会像预期的那样工作)。

这很奇怪,因为如果我将命令更改为以下命令:

找出来。-name *.po -exec回波"{}“;

它正确地输出文件的名称。

我像这样解决了这个问题:

代码语言:javascript
复制
find . -name \*.po -exec msgfmt "{}" -o {}.mo \;

但是它输出一个translation.po.mo

这是如何做到的呢?

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2013-04-10 16:08:30

-execdir怎么样?

这与-exec的不同之处在于,它从找到文件的同一个目录(而不是当前的工作目录)运行命令。考虑到您只需要在您的translation.po目录中找到一个LC_MESSAGES文件,我们就可以立即锁定这些文件,而不必费心尝试将扩展从路径的末尾断开。

代码语言:javascript
复制
find . -name \*.po -execdir msgfmt translation.po -o translation.mo \;
票数 8
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/279943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档