创建文件名包含空格的文件是一件很轻松的事情,但是想创建包含制表符,分行符甚至是其他特殊符号的文件呢?
因为 xargs 允许传递参数到命令的任意参数位,并且传递的参数还可以变换为包含各种形式的特殊符号,所以使用它可以轻松实现.例如创建包含分行符的文件.
[root@xuexi tmp]# ls
a b c d logdir one space.log shdir sh.txt test vmware-root
[root@xuexi tmp]# ls | xargs -0
a
b
c
d
logdir
one space.log
shdir
sh.txt
test
vmware-root
在此基础上创建一个. sh 文件,这个文件将奇形怪状,因为文件名竟然包含了分行符 (Linux 中文件名除了"/"和"\0"外所有字符都允许包含在内).
[root@xuexi tmp]# ls | xargs -0 -i touch {}.sh
[root@xuexi tmp]# ls
a b d one space.log sh.txt vmware-root
a?b?c?d?logdir?one space.log?shdir?sh.txt?test?vmware-root?.sh c logdir shdir test
看上去只是有几个问号,但是使用? 是无法定位它的.
[root@xuexi tmp]# find -name "*[\?]*" #搜索没结果
或者
[root@xuexi tmp]# rm -rf a #按两次tab键
a/
a^Jb^Jc^Jd^Jlogdir^Jone space.log^Jshdir^Jsh.txt^Jtest^Jvmware-root^J.sh
现在使用 xargs 就可以轻松显示它的文件名.
[root@xuexi tmp]# ls | xargs -0
a
a
b
c
d
logdir
one space.log
shdir
sh.txt
test
vmware-root
.sh
b
c
d
logdir
one space.log
shdir
sh.txt
test
vmware-root
不能直接使用 xargs 显示,因为它会压缩空白符号成空格.
[root@xuexi tmp]# ls | xargs
a a b c d logdir one space.log shdir sh.txt test vmware-root .sh b c d logdir one space.log shdir sh.txt test vmware-root
删除它.
[root@xuexi tmp]# rm -f a*.sh
如果想创建文件名只包含下面结果的 abcd 前四行的. sh 文件呢?
[root@xuexi tmp]# ls | xargs -0
a
b
c
d
logdir
one space.log
shdir
sh.txt
test
vmware-root
参考下面的.
[root@xuexi tmp]# ls | xargs -n 1 -e"logdir" | xargs -0 -i touch {}.sh
这就需要理解前面介绍的 xargs 的分割和传递方法了.
也可以使用下面更简单容易理解的:
[root@xuexi tmp]# ls | head -n 4 | xargs -0 -i touch {}.sh
[root@xuexi tmp]# echo -e "a\nb\nc\nd" | xargs -0 -i touch {}.log
那么以相同的方法创建文件名中包含制表符的文件就 easy 了.
[root@xuexi tmp]# echo -e "a\tb\tc\td" | xargs -0 -i touch {}.log
回到大纲: http://www.cnblogs.com/f-ck-need-u/p/7048359.html
来源: http://www.bubuko.com/infodetail-2471194.html