• linux命令行下文件名中包含特殊符号如何的处理方法


    问题描述

    前面《Jenkins系列之-—07 实现SQL脚本批量执行》在实际运行过程中碰到如下问题
    某次一模块SQL脚本执行完成后,再次执行还会运行,即备份执行完成的脚本这个功能没起作用,初步断定是脚本名中有某种特殊符号导致的

    分析:

    linux中碰到文件名中有空格的处理方法

    ① 使用引号将文件名括起来: touch "Me like yuh.mp3"
    ② 空格前使用连接符号""转义: touch Me like yuh.mp3 “”
    ③ 下面脚本可将文件名中间的空格用下划线_替换(注意:并不能替换文件名后面的空格)如下所示

    find . -type f -name "* *" -print |
    while read name; do
    na=$(echo $name | tr ' ' '_')
    if [[ $name != $na ]]; then
    mv "$name" "$na"
    fi
    done
    

    文件名后面的空格
    for file in *; do mv "$file" echo "$file" | tr ' ' ' ' ; done
    for file in ' '; do mv "$file" echo "$file" | sed -e 's/ /n/g'; done

    解决办法

    1. sql文件执行完成在备份时,如果文件名中间有空格,将中间空格替换为_
    2. 在比较文件名是否一致时,兼容有空格的文件名

    扩展--碰到文件名中有其他特殊字符如何处理

    1. 最直接的办法,使用时候用绝对路径,如:touch ./tmp/Me like yuh.mp3

    2. 不同类型特殊符号处理:

    2.1 不需要处理的

    具有加号(+),    
    有百分比(%)       
    有^
    有大括号{}
    有方括号[]
    有得分(_)下
    有等于(=)
    有问号(?)
    有逗号(,)
    有冒号(:)
    

    2.2 需要处理的

    文件类型 处理方式
    具有破折号(-)的文件 $ touch -- -abc.txt
    具有HASH(#)的文件 $ touch '#abc.txt'
    具有分号(;)的文件 $ touch ';abc.txt'
    具有美元符号($)的文件 $ touch '$12.txt'
    具有感叹号(!)的文件 $ touch '!12.txt'
    具有符号(@)的文件 $ touch '@12.txt'
    具有&符(&) 的文件 $ touch '&12.txt'
    具有括号()的文件 $ touch '(12.txt)'
    具有反斜线()$的文件 $ touch '12.txt'
    具有Chevrons <>的文件名 $ touch ''

    2.3 其他类型
    具有星号(*)的文件
    不需要处理的,删除选时间需要注意

    前倾斜的特殊情况
    你不能创建一个文件名,其中包括正斜杠(/)直到你的文件系统错误。 没有办法逃脱前斜线。
    所以,如果你可以创建一个文件,如“/12.txt’或’B / c.txt’,那么你的文件系统有错误或你有Unicode支持,它可以让你创建一个斜杠的文件。 在这种情况下,正斜杠不是真正的正斜杠,而是一个看起来像正斜杠的Unicode字符。

    文件名中的点标记(。)
    在文件名中包含引号(单引号和双引号) 要在文件名中加引号,我们必须使用交换规则。 也就是说,如果您需要在文件名中包含单引号,请用双引号将文件名括起来,如果您需要在文件名中有双引号,请用单引号括起来

    文件名中的波浪号(〜)
    在Linux中一些编辑器Emacs等创建该文件的备份文件进行编辑。 备份文件具有原始文件的名称以及文件名末尾的波浪号。 您可以有一个文件,其名称包括波浪号,在任何位置简单为:

  • 相关阅读:
    Sql Server 中的 @@ERROR
    MVC 自定义HtmlHelper帮助类型之分页
    CI(CodeIgniter)框架中的增删改查操作
    WMAP 启动报错 PHP- 提示缺少 msvcr110.dll 的问题
    Bat命令学习 (转载)
    C# 实现刻录光盘功能
    几个操作、名词的说明
    CheckStateChanged(复选框选中状态更改事件)和 CheckedChanged(单选按钮选中状态更改事件)二者区别?
    关于设置Visaul Studio 2010 代码编辑界面背景的方法
    checkBox1_CheckedChanged(object sender, EventArgs e)和checkBox1_CheckStateChanged(object sender, EventArgs e)不同
  • 原文地址:https://www.cnblogs.com/liuyitan/p/12734891.html
Copyright © 2020-2023  润新知