Man*_*ngo 0 shell zsh quoting rename
我最近发现了这种使用以下方法重命名文件的技术zsh
:
autoload zmv
zmv '(*).JPG' '$1.jpg'
Run Code Online (Sandbox Code Playgroud)
我也可以写成:
autoload zmv; zmv '(*).JPG' '$1.jpg'
Run Code Online (Sandbox Code Playgroud)
这就像宣传的那样工作,我可以用它来将大写JPG
扩展名更改为小写。
但是,我想从我常用的 BASH shell 中将它作为单行运行。当我尝试按如下方式调用它时:
zsh -c "autoload zmv; zmv -f '(*).JPG' '$1.jpg'"
Run Code Online (Sandbox Code Playgroud)
或作为:
echo 'autoload zmv; zmv -f "(*).JPG" "$1.jpg"' | zsh -i
Run Code Online (Sandbox Code Playgroud)
我收到类似以下消息
zmv: error(s) in substitution:
….JPG and ….JPG both map to .jpg
Run Code Online (Sandbox Code Playgroud)
这向我表明,这zsh
是不区分大小写的处理文件名,但在第一种方式运行时似乎并非如此。
显然,我不知道我在这里做什么。我还尝试反转单引号和双引号,以防外壳扩展受到阻碍。
如何从 bash 以单行方式运行此命令?
在:
zsh -c "autoload zmv; zmv -f '(*).JPG' '$1.jpg'"
Run Code Online (Sandbox Code Playgroud)
的$1
是双引号之间,你的shell(这样扩展bash
),最有可能为空字符串,从而zsh
结束了解释:
autoload zmv; zmv -f '(*).JPG' '.jpg'
Run Code Online (Sandbox Code Playgroud)
用:
zsh -c "autoload zmv && zmv '(*).JPG' '\$1.jpg'"
Run Code Online (Sandbox Code Playgroud)
凡反斜线引用的$
用于bash
去除双引号内它的特殊含义。
你也可以这样做:
zsh -c "autoload zmv && zmv '(*).(#i)jpg' '\$1.jpg'"
Run Code Online (Sandbox Code Playgroud)
在哪里(#i)
打开不区分大小写的匹配,以便它也重命名.Jpg
, .JPg
, .jpG
... 文件。
你也可以把它变成一个函数:
fix_ext_case() {
EXT=$1 zsh -c "autoload zmv && zmv \"(*).(#i)\$EXT\" '\$1.\$EXT'"
}
Run Code Online (Sandbox Code Playgroud)
或者使用不同的引号组合:
fix_ext_case() {
EXT=$1 zsh -c 'autoload zmv && zmv "(*).(#i)$EXT" "\$1.\$EXT"'
}
Run Code Online (Sandbox Code Playgroud)
用作:
fix_ext_case jpg
Run Code Online (Sandbox Code Playgroud)
或者
fix_ext_case png
Run Code Online (Sandbox Code Playgroud)
(或者fix_ext_case JPG
如果您想转换为大写)。
归档时间: |
|
查看次数: |
878 次 |
最近记录: |