如何更改 detox 的配置(破折号而不是下划线)?

如何更改 detox 的配置(破折号而不是下划线)?

到目前为止,我找到了一个解决方案,可以大量更改所有这些烦人的文件名,使它们可读且更易于在命令行中操作。

于是我在众多命令中发现了一个小软件,叫做排毒。默认情况下,它会用 替换空格_。阅读手册页并没有给我答案如何使 detox 重命名文件并用 替换空格-

[/] cd test
one five/  one four/  one one/  one three/  one two/
[test] detox *
[test] l
one_five/  one_four/  one_one/  one_three/  one_two/
[test] 

怎么做?

我找不到.detoxrc文件(或与该程序相关的任何文件),如果我创建它,我不知道要在其中放入什么。

PS 除了排毒之外还有其他方法吗?

答案1

至少从 detox 版本 1.2.0 开始,可以自定义过滤(根据您的发行版,可能需要更改以下命令/位置)。首先:

cp /usr/share/detox/safe.tbl ~/mysafe.tbl

接下来编辑文件mysafe.tbl,搜索单词“space”(第 127 行左右)并将下划线更改为连字符。

现在修改~/.detoxrceg如下:

sequence hyphenated {
   safe {filename "/home/MY_USSERNAME/mysafe.tbl";};
   #wipeup {remove_trailing;};
};

(当然替换“MY_USERNAME”...)

现在运行以下命令:

detox -vs hyphenated *

你应该可以走了:)

编辑20170801:Detox 似乎存在一些 UTF-8 问题。已经创建了一些补丁,通过电子邮件发送给上游和 debian maints,现在必须在某个名为“github”或其他网站上打开一个错误 - 是时候弄清楚了......

答案2

排毒似乎没有这个选择。修改源代码以添加具有所需输出的过滤器应该相当简单(对safe过滤器进行小修改;不要忘记确保-删除任何前导)。

您可以对 的结果进行后处理detox,或者完全使用其他工具。有许多更灵活的文件重命名工具。

Perl重命名命令(不要与 util-linux 命令混淆rename)支持使用任意 Perl 代码转换文件名。该命令可用作rename此命令在 Debian 及其衍生版本(Ubuntu、Mint 等)上。它在 Arch 上可用:Perl 重命名。如果您只想更改_-并删除前导-,您可以使用:

rename 's/_/-/g; s/\A-*//' *

这只影响当前目录中的文件(点文件除外)。要递归地作用于目录,请将其与find命令结合起来。

find . -depth -exec rename 's/_/-/g; s/\A-*//' {} +

Detox 的其他功能可以用 Perl 来表达,其中大部分都用s/PATTERN/REPLACEMENT/操作员。例如,要仅保留字母和数字并用 替换任何其他字符序列-,您可以使用

rename 's/[^[:alnum:]]+/-/g; s/\A-//' …

如果你想用 ASCII 近似 Unicode 字符, 您可以使用文本::Unicode:

perl -C -MText::Unidecode /usr/bin/rename '$_ = unidecode($_)' …

另一个强大的重命名工具是兹马夫命令来自桀骜壳。首先运行它(将其放入您的~/.zshrc交互式使用中):

autoload -U zmv

要更改_-并去除前导-,您可以使用:

zmv '**/*' '$f:h/${${f##*/-#}//_/-}'

该模式**/*使该命令递归地作用于当前目录的子目录。

相关内容