Linux下对带空格的文件进行处理

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 

不胜感激~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值