Linux下命名对文件进行命名时是不推荐使用空格的。因为一些操作对带有空格的文件会略显麻烦。
如:
#创建带空格的文件的方法
#使用\对空格进行转义
touch tes\ t
#使用双引号
touch "tes t2"
同理:对带空格的文件进行删除,或者拷贝,移动等操作时也需要用转义或者添加双引号。
可是,如果要对大量的文件进行处理时,就会更显麻烦
假如:我们要将指定目录下的所有的带空格的文件找出,并将其空格修改为"-",该怎么做呢?
#查找根目录下的所有带空格的文件
find / -name "* *"
find命令: 在指定目录下查找文件
-name:指定字符串作为寻找文件或目录的范本样式
"* *" :"*"为通配符,"*"代表任意多个任意字符,“* *”代表任意多个任意字符件之间存在空格的字符串
#用sed对获取出的数据进行处理
find /home -name "* *" | sed 's/[[:space:]]/-/g'
sed 's/x/y/g':其中s为替换的意思
g为对整行中所有与 字符串x 相同的串 替换成字符串 y
[[:space:]]:代表空格
以上命令对数据取出后,并不会直接修改文件本身。
但是我们实现的思想大概是这样的。
#!/bin/bash
#Program:
# It's testing!
#History:
# 2016.3.25 HH First release
echo -e "\n 本程序可以对目标下的带空格文件中的空格进行变换 \n"
read -p "请输入目标目录:" dir_o
#获取该目录下带空格的文件的路径
all_files=$(find ${dir_o} -name "* *")
#将原本的分隔符记录
old=${IFS}
#将内部域分隔符设置为换行
IFS=$'\n'
for file_name in ${all_files}
do
now_name=$(echo ${file_name} | sed 's/[[:space:]]/-/g')
mv "${file_name}" "${now_name}" && echo -e "成功转换${now_name}\n"
done
IFS=${old}
exit 0
如有BUG,欢迎指出~
联系方式:hh_0828@outlook.com
不胜感激~