Source From Here
Preface
在 UNIX/Linux 系統中,xargs 這個指令跟其他的指令結合之後,將會變得非常有用,這裡我們整理了一些常見的 xargs 使用範例與教學,透過這些簡單的範例可以很快的了解 xargs 的各種使用方式。雖然這裡的範例都很簡單,但是當你了解 xargs 的用法之後,你會發現 xargs 其實可以拿來處理各式各樣的問題,而且非常好用,尤其是對於伺服器的系統管理者而言,在管理大量的檔案與目錄結構時,有這樣的工具會方便很多。
xargs 基本用法
xargs 這個指令會標準輸入(standard input)讀取資料,並以空白字元或換行作為分隔,將輸入的資料切割成多個字串,並將這些字串當成指定指令(預設為 /bin/echo)執行時的參數。如果直接執行:
這裡我們沒有指定任何指令,所以預設會使用 /bin/echo,直接把三個字串輸出至終端機中。這裡雖然輸入的資料中有包含一個換行字元(\n),不過因為 xargs 預設不會保留換行字元,所以整個輸出就變成一整行。這個效果相當於:
xargs 在讀取標準輸入的資料時,會自動忽略空白行,多餘的空白或是 tab 字元也會自動被忽略。如果要指定 xargs 所要執行的指令,可以直接將指令的名稱放在所有 xargs 的參數之後,例如:
分隔字元
如果要指定 xargs 在讀取標準輸入時所使用的分隔字元,可以使用 -d 這個參數。例如:
這裡當我們使用 -d 這個參數指定分隔字元時,xargs 就會將換行字元保留下來,所以輸出會分為兩行。
參數個數上限
預設的狀況下,xargs 會把從標準輸入的資料所分割出來的字串,一次全部都放進指定指令參數中,例如:
如果我們不想讓所有的參數都放進一個指令中指令中執行,可以使用 -n 參數來指定每一次執行指令所使用的參數個數上限值,例如:
執行前的確認
如果你對於 xargs 的使用方式不是很熟悉,或是需要以 root 權限執行一些不容出錯的指令,可以加上 -p 參數,讓指令在實際執行指令之前可以先進行確認的動作。例如:
則在每一行指令執行前,都會先確認,如果要執行就輸入 y,若不執行則輸入 n,假設每一個指令我們都輸入 y 讓它執行,則整個輸出就會變成這樣:
這裡因為 xargs 的確認訊息與 echo 指令的輸出混在一起,所以看起來有點奇怪。
忽略空字串參數
如果想要避免空字串作為參數來執行指令,可以加上 -r 參數:
顯示執行的指令
使用 -t 參數可以讓 xargs 在執行指令之前先顯示要執行的指令,這樣可以讓使用者知道 xargs 執行了哪些指令。
結合 xargs 與 find 指令
xargs 本身的功能並不多,但是他跟其他的 Linux 指令一起搭配使用時,功能就會顯得很強大。與 find 指令合在一起使用是 xargs 的一項非常重要的功能,它可以讓你找尋特定的檔案,並且進行特定的處理動作。假設我們有一些資料夾,其中包含各式各樣的檔案,以 tree 指令查看目錄結構會呈現:
假設我們想要找出目前路徑之下的所有 .c 檔案,並且將其刪除,就可以使用:
這裡我們將 xargs 要執行的指令指定為 rm -f,讓 find 所找到的 .c 檔案都當成 rm -f 的參數,所以其指令的效果就相當於:
如果你對於指令的操作還不是很熟悉,也可以配合上面介紹的 -p 參數,在執行前確認一下:
包含空白的檔案名稱
假設我們的目錄中有一些檔名包含空白字元:
在這種狀況下如果用上面 find 與 xargs 的方式會無法將其刪除,原因在於當我們執行:
的時候,xargs 所產生的指令為
因為檔名包含空白,所以這會會造成 rm 指令無法正確刪除該檔案。這個時候我們可以將 find 指令加上 -print0 (print the full file name on the standard output, followed by a null character) 參數,另外將 xargs 指令加上 -0 參數:
此時命令變成:
命令列長度的限制
使用 --show-limits 參數可以查看系統對於命令列長度的限制,這些限制會跟 xargs 的運作情況有關,如果要處理很大量的資料時,這些限制要注意一下。
結合 xargs 與 grep 指令
xargs 與 grep 兩個指令的合併也是一個很常見的使用方式,它可以讓你找尋特定檔案之後,進而搜尋檔案的內容。假設我們要在所有的 .c 檔案中搜尋 stdlib.h 這個字串,就可以使用:
Preface
在 UNIX/Linux 系統中,xargs 這個指令跟其他的指令結合之後,將會變得非常有用,這裡我們整理了一些常見的 xargs 使用範例與教學,透過這些簡單的範例可以很快的了解 xargs 的各種使用方式。雖然這裡的範例都很簡單,但是當你了解 xargs 的用法之後,你會發現 xargs 其實可以拿來處理各式各樣的問題,而且非常好用,尤其是對於伺服器的系統管理者而言,在管理大量的檔案與目錄結構時,有這樣的工具會方便很多。
xargs 基本用法
xargs 這個指令會標準輸入(standard input)讀取資料,並以空白字元或換行作為分隔,將輸入的資料切割成多個字串,並將這些字串當成指定指令(預設為 /bin/echo)執行時的參數。如果直接執行:
這裡我們沒有指定任何指令,所以預設會使用 /bin/echo,直接把三個字串輸出至終端機中。這裡雖然輸入的資料中有包含一個換行字元(\n),不過因為 xargs 預設不會保留換行字元,所以整個輸出就變成一整行。這個效果相當於:
xargs 在讀取標準輸入的資料時,會自動忽略空白行,多餘的空白或是 tab 字元也會自動被忽略。如果要指定 xargs 所要執行的指令,可以直接將指令的名稱放在所有 xargs 的參數之後,例如:
分隔字元
如果要指定 xargs 在讀取標準輸入時所使用的分隔字元,可以使用 -d 這個參數。例如:
這裡當我們使用 -d 這個參數指定分隔字元時,xargs 就會將換行字元保留下來,所以輸出會分為兩行。
參數個數上限
預設的狀況下,xargs 會把從標準輸入的資料所分割出來的字串,一次全部都放進指定指令參數中,例如:
如果我們不想讓所有的參數都放進一個指令中指令中執行,可以使用 -n 參數來指定每一次執行指令所使用的參數個數上限值,例如:
執行前的確認
如果你對於 xargs 的使用方式不是很熟悉,或是需要以 root 權限執行一些不容出錯的指令,可以加上 -p 參數,讓指令在實際執行指令之前可以先進行確認的動作。例如:
則在每一行指令執行前,都會先確認,如果要執行就輸入 y,若不執行則輸入 n,假設每一個指令我們都輸入 y 讓它執行,則整個輸出就會變成這樣:
這裡因為 xargs 的確認訊息與 echo 指令的輸出混在一起,所以看起來有點奇怪。
忽略空字串參數
如果想要避免空字串作為參數來執行指令,可以加上 -r 參數:
顯示執行的指令
使用 -t 參數可以讓 xargs 在執行指令之前先顯示要執行的指令,這樣可以讓使用者知道 xargs 執行了哪些指令。
結合 xargs 與 find 指令
xargs 本身的功能並不多,但是他跟其他的 Linux 指令一起搭配使用時,功能就會顯得很強大。與 find 指令合在一起使用是 xargs 的一項非常重要的功能,它可以讓你找尋特定的檔案,並且進行特定的處理動作。假設我們有一些資料夾,其中包含各式各樣的檔案,以 tree 指令查看目錄結構會呈現:
假設我們想要找出目前路徑之下的所有 .c 檔案,並且將其刪除,就可以使用:
這裡我們將 xargs 要執行的指令指定為 rm -f,讓 find 所找到的 .c 檔案都當成 rm -f 的參數,所以其指令的效果就相當於:
如果你對於指令的操作還不是很熟悉,也可以配合上面介紹的 -p 參數,在執行前確認一下:
包含空白的檔案名稱
假設我們的目錄中有一些檔名包含空白字元:
在這種狀況下如果用上面 find 與 xargs 的方式會無法將其刪除,原因在於當我們執行:
的時候,xargs 所產生的指令為
因為檔名包含空白,所以這會會造成 rm 指令無法正確刪除該檔案。這個時候我們可以將 find 指令加上 -print0 (print the full file name on the standard output, followed by a null character) 參數,另外將 xargs 指令加上 -0 參數:
此時命令變成:
命令列長度的限制
使用 --show-limits 參數可以查看系統對於命令列長度的限制,這些限制會跟 xargs 的運作情況有關,如果要處理很大量的資料時,這些限制要注意一下。
結合 xargs 與 grep 指令
xargs 與 grep 兩個指令的合併也是一個很常見的使用方式,它可以讓你找尋特定檔案之後,進而搜尋檔案的內容。假設我們要在所有的 .c 檔案中搜尋 stdlib.h 這個字串,就可以使用:
沒有留言:
張貼留言