mkdir中的详细选项是什么?

时间:2015-02-12 06:21:03

标签: linux bash shell sh mkdir

我正在研究 Shell(Bash)Scripting 的入门知识,并注意到mkdir的联机帮助页描述了一个详细的选项,它在创建目录时显示一条消息:

-v, --verbose
       print a message for each created directory

似乎mkdir -v有一个预先定义的消息。有没有办法打印自定义消息?有没有办法永久设置自定义消息而不是默认消息?

4 个答案:

答案 0 :(得分:4)

the source code for mkdir.c开始,这是处理-v选项的部分:

    case 'v': /* --verbose  */
      options.created_directory_format = _("created directory %s");
      break;

如您所见,使用的字符串被硬编码到源中。要将邮件永久更改为自定义邮件,可以修改源代码的此部分并重新编译mkdir

答案 1 :(得分:3)

您可以创建如下脚本:

#/bin/bash

/bin/mkdir "$@" |sed -e"s/mkdir: created directory /$USER created folder /"

然后运行该脚本而不是mkdir。

通过向sed添加额外的-e“s / x / y”来修改要更改的每条消息的脚本。

如果您坚持将其命名为mkdir,那么您可以在mkdir之前将其放在搜索路径中。

我不建议将其命名为mkdir。你只会为其他调用mkdir

的脚本感到悲伤

答案 2 :(得分:2)

如果您对包装器感到满意,请尝试类似

的内容
mkdir -v "$@" | sed 's/mkdir: created directory /jar-jar: yea, weesa gotta /'

更重要的是,mkdir中的消息字符串通常或多或少是硬编码的。但是,如果有本地化支持,您实际上可以使用自己的方式覆盖消息目录。

例如,如果您的mkdir是使用gettext构建的,则可以创建一个新的英语.po文件,替换目录创建消息,构建新的语言环境,然后运行该文件。另请参阅http://translationproject.org/domain/coreutils.html

根据你的需要,这可能介于严重的过度杀伤和疯狂之间。

答案 3 :(得分:1)

您是否尝试使用此标志运行它?

lgml-alfasi2:dotfiles alfasi$ mkdir -v tp
mkdir: created directory 'tp'  <-- see why it is called 'verbose' ?
lgml-alfasi2:dotfiles alfasi$

来自男人:

-v      Be verbose when creating directories, listing them as they are created.

那么对于你的另一个问题:不 - 你不能&#34;定制&#34;预定义的消息

那就是说,这是一个开源项目,所以如果您愿意 - 您可以创建自己的分支,提交PR等:http://opensource.apple.com/source/file_cmds/file_cmds-212/mkdir/mkdir.c