linuxshell编程系列之-—02命令⾏下⽂件名中包含特殊符号如何
的处理⽅法
问题描述
前⾯在实际运⾏过程中碰到如下问题
某次⼀模块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 ' ' '\n' ; 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 不需要处理的
具有加号(+),
有百分⽐(%)
有^
有⼤括号{}
有⽅括号[]
有得分(_)下
有等于(=)
有问号(?)
有逗号(,)
linuxshell脚本怎么运行有冒号(:)
2.2 需要处理的
⽂件类型处理⽅式
具有破折号(-)的⽂件$ touch -- -
具有HASH(#)的⽂件$ touch '#'
具有分号(;)的⽂件$ touch ';'
具有美元符号($)的⽂件$ touch '$12.txt'
具有感叹号(!)的⽂件$ touch '!12.txt'
具有符号(@)的⽂件$ touch '@12.txt'
具有&符(&)的⽂件$ touch '&'
具有括号()的⽂件$ touch '(12.txt)'
具有反斜线(\)$的⽂件$ touch '\12.txt'
具有Chevrons <>的⽂件名$ touch ''
⽂件类型处理⽅式
2.3 其他类型
具有星号(*)的⽂件
不需要处理的,删除选时间需要注意
前倾斜的特殊情况
你不能创建⼀个⽂件名,其中包括正斜杠(/)直到你的⽂件系统错误。没有办法逃脱前斜线。
所以,如果你可以创建⼀个⽂件,如“/12.txt’或’B / c.txt’,那么你的⽂件系统有错误或你有Unicode⽀持,它可以让你创建⼀个斜杠的⽂件。在这种情况下,正斜杠不是真正的正斜杠,⽽是⼀个看起来像正斜杠的Unicode字符。
⽂件名中的点标记(。)
在⽂件名中包含引号(单引号和双引号)要在⽂件名中加引号,我们必须使⽤交换规则。也就是说,如果您需要在⽂件名中包含单引号,请⽤双引号将⽂件名括起来,如果您需要在⽂件名中有双引号,请⽤单引号括起来
⽂件名中的波浪号(〜)
在Linux中⼀些编辑器Emacs等创建该⽂件的备份⽂件进⾏编辑。备份⽂件具有原始⽂件的名称以及⽂件名末尾的波浪号。您可以有⼀个⽂件,其名称包括波浪号,在任何位置简单为:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。