是否可以在 Fish 中批量重命名文件,以便将空格替换为下划线?
我试图自己弄清楚,但还没有成功:https://fishshell.com/docs/current/cmds/string.html#replace-literal-examples。
我尝试过类似
for file in *; mv $file $file | string replace -a ' ' '_'; end
但这两种解决方案对我来说都不起作用。
是否可以在 Fish 中批量重命名文件,以便将空格替换为下划线?
我试图自己弄清楚,但还没有成功:https://fishshell.com/docs/current/cmds/string.html#replace-literal-examples。
我尝试过类似
for file in *; mv $file $file | string replace -a ' ' '_'; end
但这两种解决方案对我来说都不起作用。
可能存在更多我不知道的在 fish 中重命名的惯用方法,但是如果您将其放在命令替换
string replace
中,您的循环方法就会起作用:注意管道
string collect
(需要 fish 3.1.0 或更新版本) 可以防止对换行符进行拆分,因此可以对任意文件名进行拆分。string replace
但尾随换行符 (由 添加的换行符以及文件名末尾的换行符(如果有)) 会丢失。最新版本
fish
(3.4.0 或更新版本)现已添加对$(...)
Korn 风格命令替换的支持,该命令替换可以在双引号内使用,从而避免拆分,并且无需string collect
:通过使用 NUL 分隔的字符串,可以保留文件名中的尾随换行符(如果有):
但是,如果您用下划线替换空格,那么您可能还想用
\n
下划线替换其他空格字符(包括换行符,又名),这可能只是:(仅替换 ASCII空格
\r
,,,,,,)或:\n
\t
\v
\f
根据nicode字符特性来匹配 Unicode 中归类为空白的其他字符(包括不间断空格、表意空格和其他几十种字符)。
U
C
P
替换
*\ *
为{.,}*\ *
(*
用{,.}*
)也处理隐藏文件。rename
这种方法并不只适用于 fish。重命名多个文件最简单的方法可能是使用 Perl 的
rename
。要将空格转换为下划线,您需要:如果文件也在子目录中,您可以使用 globstar或者
find
:参考
y/
,请翻译而不是替代。