老男孩教育每日一题-2017年4月13日-当你删除的多个文件中包含空格或其他特殊字符,请问如何做

简介:

大家好这是老男孩教育每日一题陪伴我们的第27天。

当你删除的多个文件中包含空格或其他特殊字符,请问如何做

1
2
3
4
创建测试环境:
mkdir  -p   /oldboy/0413
cd    /oldboy/0413
touch  oldboy " " {01..10}.log

别上来就rm -f oldboy*.log哟。

  • 前言

这是大家工作中可能会遇到的比较坑的时候。

尤其是先用find命令找到你要处理的文件然后通过|xargs rm  cp   mv 经常报错。

1
2
3
4
5
6
7
8
9
10
11
[root@show01 0413] # find /oldboy/0413/ -type f-name "*.log"
/oldboy/0413/oldboy  06.log
/oldboy/0413/oldboy  03.log
/oldboy/0413/oldboy  05.log
/oldboy/0413/oldboy  04.log
/oldboy/0413/oldboy  08.log
/oldboy/0413/oldboy  01.log
/oldboy/0413/oldboy  10.log
/oldboy/0413/oldboy  07.log
/oldboy/0413/oldboy  02.log
/oldboy/0413/oldboy  09.log

注意:对于find命令还不是很熟悉的同学,请参考前几天的find命令的题目。

老男孩教育每日一题-2017410-find命令题目

http://lidao.blog.51cto.com/3388056/1914457

老男孩教育每日一题-2017410-find查找到文件并复制系列题目

http://lidao.blog.51cto.com/3388056/1914790

  • 遇到的问题 

然后我这里不删除,通过ls-l 给大家演示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@show01 0413] # find /oldboy/0413/ -type f-name "*.log"|xargs ls -l
ls : cannot access  /oldboy/0413/oldboy : No such fileor directory
ls : cannot access 06.log: No such  file  or directory
ls : cannot access  /oldboy/0413/oldboy : No such fileor directory
ls : cannot access 03.log: No such  file  or directory
ls : cannot access  /oldboy/0413/oldboy : No such fileor directory
ls : cannot access 05.log: No such  file  or directory
ls : cannot access  /oldboy/0413/oldboy : No such fileor directory
ls : cannot access 04.log: No such  file  or directory
ls : cannot access  /oldboy/0413/oldboy : No such fileor directory
ls : cannot access 08.log: No such  file  or directory
ls : cannot access  /oldboy/0413/oldboy : No such fileor directory
ls : cannot access 01.log: No such  file  or directory
ls : cannot access  /oldboy/0413/oldboy : No such fileor directory
ls : cannot access 10.log: No such  file  or directory
ls : cannot access  /oldboy/0413/oldboy : No such fileor directory
ls : cannot access 07.log: No such  file  or directory
ls : cannot access  /oldboy/0413/oldboy : No such fileor directory
ls : cannot access 02.log: No such  file  or directory
ls : cannot access  /oldboy/0413/oldboy : No such fileor directory
ls : cannot access 09.log: No such  file  or directory

因为文件中的特殊字符常见的就是空格,一般如果一个文件我们就转义一下空格就行\空格,但是文件太多了,这就没办法玩了。

这里介绍一个find命令的参数 -print0(注意这是数字0),表示find在找到文件后在文件的结尾加上一个标记,不用默认的空格分隔文件。

1
2
[root@show01 0413] # find /oldboy/0413/ -type f -name"*.log" -print0
/oldboy/0413/oldboy  06.log /oldboy/0413/oldboy03 .log /oldboy/0413/oldboy  05.log /oldboy/0413/oldboy  04.log /oldboy/0413/oldboy08 .log /oldboy/0413/oldboy  01.log /oldboy/0413/oldboy  10.log /oldboy/0413/oldboy07 .log /oldboy/0413/oldboy  02.log /oldboy/0413/oldboy  09.log[root@show01 0413] #

加上参数后,find命令找到的每个文件会在文件结尾加上一个标记(空符号)

正巧了,xargs 也有个参数专门识别这个空标记,-0(数字0)。

  • 解决方法就是:

1
2
3
4
5
6
7
8
9
10
11
[root@show01 0413] # find /oldboy/0413/ -type f -name"*.log" -print0 |xargs -0 ls -l
-rw-r--r-- 1 root root 0 Apr 13 18:12  /oldboy/0413/oldboy  01.log
-rw-r--r-- 1 root root 0 Apr 13 18:12  /oldboy/0413/oldboy  02.log
-rw-r--r-- 1 root root 0 Apr 13 18:12  /oldboy/0413/oldboy  03.log
-rw-r--r-- 1 root root 0 Apr 13 18:12  /oldboy/0413/oldboy  04.log
-rw-r--r-- 1 root root 0 Apr 13 18:12  /oldboy/0413/oldboy  05.log
-rw-r--r-- 1 root root 0 Apr 13 18:12  /oldboy/0413/oldboy  06.log
-rw-r--r-- 1 root root 0 Apr 13 18:12  /oldboy/0413/oldboy  07.log
-rw-r--r-- 1 root root 0 Apr 13 18:12  /oldboy/0413/oldboy  08.log
-rw-r--r-- 1 root root 0 Apr 13 18:12  /oldboy/0413/oldboy  09.log
-rw-r--r-- 1 root root 0 Apr 13 18:12  /oldboy/0413/oldboy  10.log

注意:如果你不给xargs加上-0参数,命令也会提示你的。

1
2
[root@show01 0413] # find /oldboy/0413/ -type f -name"*.log" -print0 |xargs ls -l
xargs :Warning: a NUL character occurred  in  the input. It cannot be passed through  in  the argument list.  Did you mean to use the --null option?

xargs提示:警告:我在读取前面命令给我的文件的时候,发现了空字符。这玩意我处理不了啊!!!给你指条路,xargs 加上--null(等同于-0)参数就可以处理了。

linux还是很可爱的吧。

1
2
3
4
5
6
7
8
9
10
11
ls : cannot access  /oldboy/0413/oldboy : No such  file  or directory
ls : cannot access 06.log: No such  file  or directory
ls : cannot access 03.log: No such  file  or directory
ls : cannot access 05.log: No such  file  or directory
ls : cannot access 04.log: No such  file  or directory
ls : cannot access 08.log: No such  file  or directory
ls : cannot access 01.log: No such  file  or directory
ls : cannot access 10.log: No such  file  or directory
ls : cannot access 07.log: No such  file  or directory
ls : cannot access 02.log: No such  file  or directory
ls : cannot access 09.log: No such  file  or directory
  •  小结 

这就是find命令的参数-print0的作用,一般处理这些文件名包含特殊符号的比如空格啥的,很方便。


本文转自 李导 51CTO博客,原文链接:http://blog.51cto.com/lidao/1915449

相关文章
亲身经历:如何判断一个字符在a/z之前?
亲身经历:如何判断一个字符在a/z之前?
71 0
|
前端开发 JavaScript
#yyds干货盘点# 前端歌谣的刷题之路-第四十二题-去掉字符串两端空格
#yyds干货盘点# 前端歌谣的刷题之路-第四十二题-去掉字符串两端空格
90 0
#yyds干货盘点# 前端歌谣的刷题之路-第四十二题-去掉字符串两端空格
|
JSON API 数据格式
一日一技:难以置信,还有人不知道反斜杠和引号的关系
一日一技:难以置信,还有人不知道反斜杠和引号的关系
270 0
一日一技:难以置信,还有人不知道反斜杠和引号的关系
中秋佳节,实现一个自定义任意路径嫦娥奔月!祝您中秋快乐!
中秋节将至,又到了赏月、吃月饼的时候了。 中秋节是中国的传统节日,以月之圆象征团圆之意,寄托人们思念家乡,思念亲人之情。 说起中秋节就不得不说关于中秋节的故事传说,其中最有名的就是嫦娥奔月。 我们就以嫦娥奔月为题,制作一款嫦娥奔月的小Demo吧。
|
前端开发
前端百题斩【022】——开拓思路之三种方式实现字符串转驼峰
前端百题斩【022】——开拓思路之三种方式实现字符串转驼峰

热门文章

最新文章