xargs的i與l參數的區別


xargs與find經常結合來進行文件操作,平時刪日誌的時候只是習慣的去刪除,比如

 # find . -type f -name "*.log" | xargs rm -rf *

就將以log結尾的文件刪除了,如果我想去移動或者複製就需要使用參數來代替了。

xargs  -i 參數或者-I參數配合{}即可進行文件的操作。

-I replace-str

              Replace  occurrences  of  replace-str  in the initial-arguments with names read from standard input.  Also, unquoted blanks do not terminate

              input items; instead the separator is the newline character.  Implies -x and -L 1.


       --replace[=replace-str], -i[replace-str]

              This option is a synonym for -Ireplace-str if replace-str is specified, and for -I{} otherwise.  This option is deprecated; use -I  instead.

man了一下看的還是不太懂,通過例子,做作實驗將我的理解寫一下。




############### 操作的目錄下的文件###############

[root@test05 ab]# ls

1kk.zip  3kk.zip  5kk.zip  b.rar  d.rar  f.rar  h.rar  j.rar  mini.txt  ni.txt

2kk.zip  4kk.zip  a.rar    c.rar  e.rar  g.rar  i.rar  k.rar  nii.txt

###################使用 i 參數 ##################

[root@test05 ab]# find . -type f -name "*.txt" | xargs -i cp {}  /tmp/k/

[root@test05 ab]# ls ../k/

mini.txt  nii.txt  ni.txt

[root@test05 ab]#

###################  使用 I  參數 ################

[root@test05 ab]# find . -type f -name "*.txt" | xargs -I {} cp {}  /tmp/n/

[root@test05 ab]# ls ../n/

mini.txt  nii.txt  ni.txt

結果出來了,

  加-i 參數直接用 {}就能代替管道之前的標準輸出的內容;

 加 -I 參數 需要事先指定替換字符






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章