xargs命令備忘

2021-10-06 10:11:38 字數 3203 閱讀 3476

6 備忘

xargs可以將標準輸入作為輸入內容轉換成後續命令列的引數;

通常用於標準輸入或者處理管道將其轉換成特定命令列的執行引數

其常用功能總結如下:

建立測試檔案;

user@user:~/test$ touch a.md b.md c.md 1.js 2.js

user@user:~/test$ ls

1.js 2.js a.md bin b.md c.md

篩選檔案

fwd@fwd:~/test$ ls *.md | xargs ls -al

-rw-r--r-- 1 fwd fwd 0 8月 3 22:44 a.md

-rw-r--r-- 1 fwd fwd 0 8月 3 22:44 b.md

-rw-r--r-- 1 fwd fwd 0 8月 3 22:44 c.md

-i選項支援我們將管道傳入引數替換成指定字串,並再後續執行中使用字串展開為實際值進行處理。仍然以2創立檔案為例進行說明;

使用命令:

ls *.md |

xargs -i '{}'

mv.backup

ls *.md |

xargs -i '%'

mv % %.backup

執行結果:

fwd@fwd:~/test$ ls *.md | xargs -i '{}' mv {} {}.backup

fwd@fwd:~/test$ ls -l

總用量 4

-rw-r--r-- 1 fwd fwd 0 8月 3 22:44 1.js

-rw-r--r-- 1 fwd fwd 0 8月 3 22:44 2.js

-rw-r--r-- 1 fwd fwd 0 8月 3 22:44 a.md.backup

drwxr-xr-x 2 fwd fwd 4096 8月 3 22:03 bin

-rw-r--r-- 1 fwd fwd 0 8月 3 22:44 b.md.backup

-rw-r--r-- 1 fwd fwd 0 8月 3 22:44 c.md.backup

預設情況下我們從管道或者標準輸入分割引數,使用空格或者回車分割,xargs提供了多種其他分割機制。

有時候檔案存在特殊字元,比如空格或者回車字元,使用

touch 'hello 01.js' 'hello 02   .js'

fwd@fwd:~/test$ touch 'hello 01.js' 'hello 02 .js'

fwd@fwd:~/test$ ls -l

總用量 4

drwxr-xr-x 2 fwd fwd 4096 8月 3 22:03 bin

-rw-r--r-- 1 fwd fwd 0 8月 3 23:11 'hello 01.js'

-rw-r--r-- 1 fwd fwd 0 8月 3 23:11 'hello 02 .js'

此時使用之前形式會形成錯誤分割,造成無法正確識別檔案:

fwd@fwd:~/test$ find . -name "*.js"|xargs ls -l

ls: 無法訪問'./hello': 沒有那個檔案或目錄

ls: 無法訪問'01.js': 沒有那個檔案或目錄

ls: 無法訪問'./hello': 沒有那個檔案或目錄

ls: 無法訪問'02': 沒有那個檔案或目錄

ls: 無法訪問'.js': 沒有那個檔案或目錄

-rw-r--r-- 1 fwd fwd 0 8月 3 22:03 ./bin/a.js

-rw-r--r-- 1 fwd fwd 0 8月 3 22:03 ./bin/b.js

此時應該修正命令列如下所示

fwd@fwd:~/test$ find . -name "*.js" prin0 |xargs -0 ls -l

find: paths must precede expression: `prin0'

總用量 4

drwxr-xr-x 2 fwd fwd 4096 8月 3 22:03 bin

-rw-r--r-- 1 fwd fwd 0 8月 3 23:11 'hello 01.js'

-rw-r--r-- 1 fwd fwd 0 8月 3 23:11 'hello 02 .js'

如上所示,執行結果沒有了之前所示報錯。主要原因是我們再find引數使用時候使用了print0選項,將查詢結果加入null字元後進行輸出顯示;然後xargs配合使用-0選項識別引數結束符,將有效檔名進行分割識別,避免錯誤將檔名空格擷取導致無法識別檔名的問題!

find

. -name "*.js"

|xargs

ls -l

cat url-list.txt |

xargs

wget -c

#### 2-將列印一列數字的偶數個篩選出來排序

echo

" 1 21 1 12 212 18"

|xargs -n2 |

awk''

|sort -r

####3-

echo

"user#ding#127.0.0.1#8080"

|xargs -d "#"

使用-t引數記錄xargs執行結果

fwd@fwd:~/test$ ls *.md |

xargs -t -i '%'

mv % %.1

mv a.md.backup.md a.md.backup.md.1

mv b.md.backup.md b.md.backup.md.1

mv c.md.backup.md c.md.backup.md.1

find 與xargs何用時候,為了避免檔名中含有特殊字元,特別是空格,會使用print0作為輸出,相應的xargs使用-0選項配合可以有效避免名字識別錯誤問題!

我的awk常用命令備忘 xargs備忘

kubectl get deployment n coding awk xargs kubectl rollout restart deployment n coding 重啟所有 coding命名空間 deployment 重啟業務deployment指令碼 bin bash user list ...

高階命令 xargs命令

xargs命令 linux 命令大全 xargs 英文全拼 extended arguments 是給命令傳遞引數的乙個過濾器,也是組合多個命令的乙個工具。xargs 可以將管道或標準輸入 stdin 資料轉換成命令列引數,也能夠從檔案的輸出中讀取資料。xargs 也可以將單行或多行文字輸入轉換為其...

xargs命令使用

功能介紹 man文件介紹為 從標準輸入重建並執行命令列。xargs是可以讀入stdin的資料,並且以空白符或斷行字元進行分辨,將stdin的資料分割成為arguements。因為是以空格符作為分隔,所以,如果有一些檔名或者其他意義的名詞內含空格符的時候,xargs可能就會誤判了。xargs選項表 選...