xargs連接前後命令時的功能分析
xargs的使用:
# find / -type f -name "*.log" -print|xargs ls -l #會在執行命令後過段時間才會有輸出,即:find完成後結果一塊echo給ls 作為輸入,只執行了一次ls
# find / -type f -name "*.log" -print|xargs -I{} ls -l {} #會立即有輸出,即:find到一個便會有輸出;find的每次結果都作為單次ls的輸入即執行了n次ls;
-p參數會提示確認是否執行命令,通過-p參數可以看到上邊兩個命令的不同。
# find / -type f -name "*.log" -print|xargs -I{} -p ls -l {}
ls -l /configassist.log ?...y
-rw-r--r-- 1 root system 0 Jun 27 2012 /configassist.log
ls -l /etc/tunables/lastboot.log ?...y
-rw-r--r-- 1 root system 322 Jun 27 2012 /etc/t*****/lastboot.log
ls -l /home/cft/CFT/distrib/copilot/help_fr/translation cft 2_4.log ?...y
-rw-r--r-- 1 cft ftpgrp 25111 Jan 22 2009 /home/*******/copilot/help_fr/translation cft 2_4.log
ls -l /home/cft/mftlog/cftmonitor.log ?...
# find / -type f -name "*.log" -print|xargs -p ls -l
ls -l /confi****sist.log /etc/tunables/lastboot.log /home/****/copilot/help_fr/translation cft 2_4.log /home/cft/****/cftmonitor.log /home/cft/****/cronclear_20120621.log /home/cft/****/cronclear_20120622.log /home/cft/***/cronclear_20120623.log …………………………………………………… /home/***/dba/dbload/oracle/ctl/tbl_user_inf.log?...
-n可以指定多少個輸入執行一次後邊的命令,因此當n設為1的時候效果跟-I一樣。這樣可以解決一些命令的參數需要單個輸入的情況。
例子:查看連接8000的光纖卡的屬性:
XXXXX:root:/>datapath query adapter |grep fscsi |awk '{print $2}' |xargs -n 1 lsattr -El
attach switch How this adapter is CONNECTED False
dyntrk yes Dynamic Tracking of FC Devices True
fc_err_recov fast_fail FC Fabric Event Error RECOVERY Policy True
scsi_id 0x140c00 Adapter SCSI ID False
sw_fc_class 3 FC Class for Fabric True
attach switch How this adapter is CONNECTED False
dyntrk yes Dynamic Tracking of FC Devices True
fc_err_recov fast_fail FC Fabric Event Error RECOVERY Policy True
scsi_id 0x20c00 Adapter SCSI ID False
sw_fc_class 3 FC Class for Fabric True