我想创建一个列表:
0123456789abcdefghijklmnopqrstuvxwyzABCDEFGHIJKLMNOPQRSTUVXWYZ-._
然后迭代文件夹中的所有文件,用下划线替换此列表中不存在的文件名中的每个字符_
.
这包括空格.
但仅使用Bash和GNU工具.
那可能吗?
仅限Bash内部:
for file in *; do repl=${file//[!$permitted]/_} case $file in "$repl") continue;; esac # skip if identical # Safety: add a suffix to avoid overwriting while [ -e "$repl" ]; do repl=${repl}_ done mv "$file" "$repl" done
如果$permitted
包含斜杠,则需要反斜杠 - 转义它.