Linux - Shell - 替换文件名中的空格
概述
- 使用 shell 替换 文件名中的空格
背景
- 尝试用 find 配合 xargs, 在多个文件里找关键字
- 出现了问题
- 有空格的文件名, 并不是很好处理
准备
- os
- centos7
- os
1. 问题: 文件名中的空格
场景
- 需要在多个文本里, 查找某个关键字
方法
- find 配合 xargs
问题
- 文件名里有空格
结果
- xargs 会把 带有空格的文件名, 当做多个文件
处理
使用 -i {} 处理
结果
- 可以找出来了
- 但是会丢失 文件名
所以, 还是得换别的思路来处理
- 文件名里有空格
2. 处理思路
1. 思路1: 先打印文件名, 然后再查找
概述
- 打印文件名
- 查找
xargs 执行多条命令
概述
- xargs 后面, 可以一次执行多个命令
命令
> find . -type f | xargs -i sh -c 'echo {}; grep "#" {}'
结果
- 还是失败了
- 因为 grep 那里, 还是会把 含有空格 的文件名, 分开
- 所以还是 写脚本 吧
- 还是失败了
脚本
概述
- 将之前的思路, 写到一个脚本里
脚本
#!/bin/bash
# 脚本名字, 叫 script01.sh
# arg1 是 需要匹配的模式, 参数用 "" 包一下
# arg2 是 文件名
echo $2
grep "$1" "$2"
最终命令
命令
> find . -type f | xargs -i ./script01.sh "#" {}
结果
- 可以正常显示和打印
- 问题
- 就算没有模式, 文件名 也会被打印
- 一定程度上影响了判断
2. 思路2: 批量修改文件名
概述
- 批量修改文件名
- 然后直接 grep 查找
问题: 修改文件名
- 如何修改文件名
- 思路1: 删除空格
- 不行
- note1 2 修改后是 note12
- 可是如果真的有 note12 怎么办?
- 不行
- 思路2: 替换空格
- 使用特殊的字符替换
-
- _
- 其他合法字符
- 注意避免之前的重名问题即可
- 使用特殊的字符替换
- 思路1: 删除空格
- 如何修改文件名
脚本
#!/bin/bash
# 脚本名 script02.sh
# $1 是需要修改的文件名
# 涉及到 shell 的一些 字符串操作, 这个后续会讲 from=$1
echo $from
# $from 如果是 find 找出来的, 会含有一个路径, 这个操作的目的, 是去掉 路径, 留下 文件名
from=${from##*/}
echo $from
to=${from// /_}
echo $to mv "${from}" $to
最终命令
命令
> find . -type f -name "* *" | xargs -i ./script02.sh {}
> find . -type f | xargs grep "#"
结果
- 还不错
ps
ref
- 学习 bash
其他
- 以后命名一定注意, 不会在 文件 和 目录 名称里, 带空格
后续
- shell 字符串截取
Linux - Shell - 替换文件名中的空格的更多相关文章
- Linux shell去除字符串中所有空格
Linux shell去除字符串中所有空格 echo $VAR | sed 's/ //g'
- Shell 处理文件名中包含空格的文件
最近在学Gradle, 使用git clone 命令下载了一些资料,但是文件名含有空格,看上去不是很舒服,因此想到用shell脚本对其进行批处理,去掉文件名中的空格,注意这里是把所有的空格全去掉 gi ...
- response.setHeader("Content-disposition","attachment;filename="+fileName) 下载时文件名中存在空格错误
最近在进行文件下载时发现一个问题,就是下面语句运行时,下载某些文件正常,下载某些文件异常,后来发现文件名中有空格的文件火狐浏览器是默认将文件名截断了的 response.setHeader(" ...
- find + xargs + cp 遇到文件名中带空格如何处理
一,需求为查询文件名为ZRSH开头的时间为7月至今的所有文件并打包 1.首先想到的就是find + xargs + cp 格式.. find 2016073* -type f -name *ZRS ...
- 火狐浏览器下载文件中文乱码,文件名中的空格变加号("+")的问题
解决一下问题: 1.火狐浏览器下载文件,中文变乱码 2.IE浏览器下载文件,丢失文件扩展名或强制扩展名为".txt" 3.浏览器下载文件,文件名中的空格变成加号("+&q ...
- Linux shell 提取文件名和目录名的一些方法(转)
很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等.例如,从路径/dir1/dir2/file.tx ...
- 【剑指offer】替换字符串中的空格
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25002199 剑指offer上的第四道题目,在九度OJ上測试通过,但还是有些问题.由于是用 ...
- (CSDN迁移) 替换字符串中的空格
题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. public ...
- JS 剑指Offer(三) 替换字符串中的空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20". 实现这个函数的方法很简单,在JS中可以直接应用正则表达式,代码如下 直接将全局中的space换成%20,一行代码搞定 ...
随机推荐
- 简述react、redux、react-redux、redux-saga、dva之间的关系
[react] 定位:React 是一个用于构建用户界面的JavaScript库. 特点:它采用声明范式来描述应用,建立虚拟dom,支持JSX语法,通过react构建组件,能够很好的去复用代码: 缺点 ...
- IP后面带/30 /29 /27等是什么意思?
那个代表你网络的位数,也就是能判断子网掩码.比如30 说明就是11111111.11111111.11111111.11111100 (30个1,2个0)然后转换成十进制就是255.255.255.2 ...
- word中模板的使用
新建一个word文档,修改样式库中的样式,比如各章节的标题正式格式.设计好后,将文件保存为word模板. 一般自定义的模板默认保存在”C:\Users\lizhe\Documents\自定义 Offi ...
- Qt获取当前屏幕大小
1.头文件 #include<QScreen> 2.代码 QScreen *screen = QGuiApplication::primaryScreen (); QRect screen ...
- 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase的shell应用v2.0
HRegion 当表的大小超过设置值的时候,HBase会自动地将表划分为不同的区域,每个区域包含所有行的一个子集.对用户来说,每个表是一堆数据的集合,靠主键来区分.从物理上来说,一张表被拆分成了多块, ...
- hibernate.exception.GenericJDBCException: could not extract ResultSet 解决办法
这句话翻译过来就是无法提取ResultSet 我在联查表的视图的时候发现的问题,明明之前好好的 那么你就得想想了 你再把错误信息往上翻翻,能不能看到 no viable alternative a ...
- C#设计模式学习笔记:设计原则
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8287784.html,记录一下学习过程以备后续查用. 写代码也是有原则的,我们之所以使用设计模式,主要是为了 ...
- win10子系统ubuntu忘记密码解决方案
准备部署一个rocket.chat 需要安装mongodb 3.6 准备直接在子系统中安装一下,结果忘记ROOT密码了 找了一下子系统重置密码 记录如下 ubuntu config --defau ...
- P1642 规划 [01分数规划]
裸题,考虑size完了跑一个树上背包,这题没了. // by Isaunoya #include <bits/stdc++.h> using namespace std; #define ...
- 集合使用 Iterator 删除元素
针对常见的数据集合,比如 ArrayList 列表,对其进行遍历,删除其中符合条件的某个元素,使用 iterator 迭代器进行迭代,代码如下: public class PracticeContro ...