当前位置:  开发笔记 > 编程语言 > 正文

BASH:Raplace文件名不在列表中的字符

如何解决《BASH:Raplace文件名不在列表中的字符》经验,为你挑选了1个好方法。

我想创建一个列表:

0123456789abcdefghijklmnopqrstuvxwyzABCDEFGHIJKLMNOPQRSTUVXWYZ-._

然后迭代文件夹中的所有文件,用下划线替换此列表中不存在的文件名中的每个字符_.

这包括空格.

但仅使用Bash和GNU工具.

那可能吗?



1> tripleee..:

仅限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包含斜杠,则需要反斜杠 - 转义它.


值得一提的是,使用bash 4,`shopt -s globstar`让你用`for file in**/*进行递归.做什么?
@glennjackman谢谢,对不对!我添加了一个粗略的安全措施.
推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有