Linux "xargs" command

来源:互联网 发布:淘宝解绑手机号码 编辑:程序博客网 时间:2024/06/06 05:06
 原贴:http://163.23.24.147/ya/read-293.html

的工作是將上一個程式輸出的結果轉成下一個程式的參數輸入

範例:
    假設有一個目錄如下 
(這個樹狀目錄架構是使用 tree 指令所產生的)
.
|-- Makefile
|-- VERSION
|-- VERSION.bak
|-- inc
|   |-- fork.h
|   |-- main.h
|   `-- main.h.bak
`-- src
    |-- common_lib
    |   |-- dl_math.c
    |   |-- dl_math.c.bak
    |   |-- dl_string.c
    |   `-- dl_string.c.bak
    |-- fork.c
    |-- fork.c.bak
    `-- main.c

這是一個程式開發的專案目錄,如果我想要將所有的*.bak 一次清除,那麼該怎麼做呢?
首先我得先找出所有的 *.bak,可以使用 find 指令

find -iname "*.bak"

可以得到以下的結果
./VERSION.bak
./inc/main.h.bak
./src/fork.c.bak
./src/common_lib/dl_string.c.bak
./src/common_lib/dl_math.c.bak

接下來就是關鍵了
你會怎麼做呢?
1) 把結果使用">" 導向檔案,全部加入 rm (linux 的刪檔指令)嗎?
2) 還是把這些輸出內容變成 rm 的輸入呢?
第一種方式是愚公移山…如果有幾千個檔案…可能會很辛苦~
第二種方式就是使用xargs 來實現我們的理想

find -iname "*.bak" | xargs rm

紅色部份就是xargs 使用的方式,它會將前面的輸出轉化為它後方指令的參數輸入
執行之後,所有的*.bak 備份檔都被清乾淨了,所有子目錄下的 bak檔也被清除了
引用通告地址: http://mobicom.no-ip.org/ya/trackback.php?tbID=293&extra=601d07