xra*_*alf 8 command-line shell rename
我试图从目录中的所有文件名中删除撇号。
for i in *; do mv $i `echo $i | tr -d "'"`; done
Run Code Online (Sandbox Code Playgroud)
执行此命令后,不会重命名任何内容。
你知道这里有什么问题吗?
Mat*_*Mat 10
你可以试试这样的(bash):
shopt -s nullglob
for i in *\'* ; do mv -v "$i" "${i/\'/}" ; done
Run Code Online (Sandbox Code Playgroud)
这使用 shell 字符串替换。您可能不想 glob 文件中没有的文件,'因为它们mv会失败。如果没有这个nullglob选项,mv如果没有匹配的文件,glob 模式本身将被传递给。
始终在变量替换$foo和命令替换周围放置双引号$(foo)(除非您知道为什么需要将它们排除在外以及为什么可以这样做)。
for i in *; do mv "$i" "$(echo "$i" | tr -d "'")"; done
Run Code Online (Sandbox Code Playgroud)
这通常会起作用,但有一些限制:
-,mv则会出现不良行为或错误,因为会将其解释为一个选项。..echo命令中的反斜杠。在 ksh93、bash 和 zsh 中,您可以使用${VARIABLE//PATTERN/REPLACEMENT}构造更轻松地编写它。添加--到mv处理以-. 如果您的文件名以 开头.,请根据需要添加.*或.[^.]* ..?*之后*。
for i in *; do mv -- "$i" "${i//\'/}"; done
Run Code Online (Sandbox Code Playgroud)
在 zsh 中,您可以使用zmv:
zmv '(*)' "\${1//\\'/}"
Run Code Online (Sandbox Code Playgroud)
在 Debian、Ubuntu 等衍生产品下,可以使用renamePerl 脚本。
rename "s/'//g" *
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15359 次 |
| 最近记录: |