027-老男孩教育每日一题-当你删除的多个文件中包含空格或其他特殊字符改怎么办
大家好这是老男孩教育每日一题第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命令的题目。
老男孩教育每日一题-2017年4月10日-find命令题目
https://www.drscrewdriver.com/125.html
老男孩教育每日一题-2017年4月10日-find查找到文件并复制系列题目
https://www.drscrewdriver.com/126.html
- 遇到的问题
然后我这里不删除,通过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 3 | [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的作用,一般处理这些文件名包含特殊符号的比如空格啥的,很方便。
今天是老男孩教育每日一题陪伴大家的第27天。
往期题目索引
继续阅读