利用接收到的输入构造并运行其它命令.或者说xargs将它接收到的输入输出给xargs后面的命令,作为后面那个命令的参数。
语法:
xargs [options] [command]
1. 比较当前目录下以f开头的文件对的不同 (如, f1.a 、 f1.b、 f2.a 、f2.b等):
ls f* | xargs -n2 diff
2. 显示文件,每行一个单词:
cat file | xargs -n1
3. 将文件从olddir移动到newdir,同时显示每条命令( -t: 要运行每条命令前显示它 ):
ls olddir | xargs -i -t mv olddir/{} newdir
4. 删除当前目录下的文件
ls | xargs rm
5. 删除vsftpd进程。
ps x|grep -m1 vsftpd | gawk '{print $1}'| xargs kill
6. 在当前目录下找出一天内修改过的文件,并打印它们的内容.
find . -type f -mtime -1 -print | xargs pr -n
7. 查找Members目录下的普通文件,并在这些文件中查找字符串"google"
find Members/ -type f -print0 | xargs -0 grep "google"
一. 参照BASH编程手册,运行并分析"例子 33-2 稍微复杂一些的shell包装", 该脚本的功能是将一个文件中的某个字符串(或匹配模式), 替换为另一个字符串(或匹配模式)
二. 参照BASH编程手册,运行并分析"例子 A-17. tree: 显示目录树", 该脚本的功能是显示树形目录结构
三. 参照BASH编程手册,运行并分析"例子 10-8. 列出系统上的所有用户"
四. 参照BASH编程手册,运行并分析"例子 10-9. 在目录的所有文件中查找源字串"
五. 参照BASH编程手册,运行并分析"例子 10-11. 将目录中所有符号链接文件的名字保存到一个文件中"
六. 参照BASH编程手册,运行并分析"例子 10-28. 检查输入字符是否为字母"
七. 参照BASH编程手册,运行并分析"例子 12-5. Logfile: 使用xargs来监控系统log"
八. 参照BASH编程手册,运行并分析"例子 12-6. 把当前目录下的文件拷贝到另一个文件中"
九. 参照BASH编程手册,运行并分析"例子 12-7. 通过名字kill进程"
十. 参照BASH编程手册,运行并分析"例子 12-8. 使用xargs分析单词出现的频率"
1. 删除文件中的重复行,可以将删除重复行的结果显示在屏幕上,也可以将删除重复行的结果重定向输出到另一个文件中.假定脚本的文件名为xx,则希望达到以下效果:
执行:
# ./xx ff1
可以将文件ff1中的重复行删除,并将结果显示在屏幕上.
执行:
# ./xx ff1 ff1new
可以将文件ff1中的重复行删除,并将结果输出到文件ff1new中.
2. 参照"例子 10-8. 列出系统上的所有用户",编写一个脚本列,出系统上不允许登录(即登录脚本为/sbin/nologin)的用户.
3. 参照"例子 10-9. 在目录的所有文件中查找源字串",编写一个脚本,在x目录中,扩展名为y的文件内查找字符串z, x、y、z都由命令行参数确定。
4. 参照"例子 10-11. 将目录中所有符号链接文件的名字保存到一个文件中",编写一个脚本,将目录中所有近一天内创建的文件名保存到一个文件中。
5. 编写脚本, 将1至100内能被3整除的数字相加,能被5整除的数字相加,能被7整除的数字相加,能被9整除的数字相加.将最后结果按大小顺序输出.
6. 参照"例子 10-28. 检查输入字符是否为字母",完成例子中给出的任务----编写一个'isfloat ()'函数来测试浮点数.
7. 参照"例子 12-8. 使用xargs分析单词出现的频率",查找指定的单词出现的频率.即,假定该脚本文件为e7.sh,执行:
e7.sh anaconda.log network
就能输出在文件anaconda.log中单词network出现了多少次.
8. 参照"例子 13-11. killall, 来自于/etc/rc.d/init.d",并完成下面的练习:
练习1). 察看并分析/etc/rc.d/init.d下的dovecot脚本.
练习2). 在/etc/rc.d/init.d中, 分析halt脚本. 比脚本killall长一些, 但是概念上很相近. 对这个脚本做一个拷贝, 放到你的home目录下并且用它练习一下, (不要以root身份运行它). 使用-vn标志来模拟运行一下(sh -vn scriptname). 添加详细的注释. 将"action"命令修改为"echo".