成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊一聊Linux 下 Xargs 命令,你知道嗎?

系統 Linux
xargs 常常被大家忽略的一個命令,對它的一些用法很多人可能不熟悉,其實它是一個功能強大的命令,特別是在結合管道進行批量處理方面。

 [[378289]]

xargs 常常被大家忽略的一個命令,對它的一些用法很多人可能不熟悉,其實它是一個功能強大的命令,特別是在結合管道進行批量處理方面

語法

xargs 語法格式如下

  1. xargs [OPTION]... COMMAND 

作用

xargs 最重要的作用是以空格或者換行作為分隔符,把標準輸入轉化成多個命令行參數,在與管道命令結合使用時,就能體現出 xargs 的作用

下面以實例來說明

  1. [root@ecs-centos-7 tmp]# echo "11 22 33" | xargs mkdir 
  2. [root@ecs-centos-7 tmp]# ll 
  3. 總用量 16 
  4. drwxr-xr-x 2 root root 4096 1月  20 00:03 11 
  5. drwxr-xr-x 2 root root 4096 1月  20 00:03 22 
  6. drwxr-xr-x 2 root root 4096 1月  20 00:03 33 

上面的例子中, 管道左側的命令 echo "11 22 33" 的輸出作為管道右側命令 xargs mkdir 的輸入, 管道右側的命令將左側的輸入以空格或者換行為分隔符分成多個命令行的參數

所以 echo "11 22 33" | xargs mkdir 命令等同于下面的三條命令

  1. mkdir 11 
  2. mkdir 22 
  3. mkdir 33 

選項說明

選項 說明
-d 指定輸入參數的分隔符,默認是以空格或換行作為分隔符
-p 打印出將要執行的命令,并詢問用戶是否要執行
-t 打印出最終執行的命令并執行,不需要用戶確認
-0 表示用 null 作為分隔符
-n 每次將一行中的多少項參數作為命令行參數
-I 指定每一項命令行參數的替代字符串,類似一個存儲參數項的中間變量
-r 當輸入不包括任何非空格時,不執行命令

實例1 不帶任何選項的 xargs

xargs 命令大部分是和管道一起使用,但是它也可以單獨使用, 這時候xargs相當于 echo 命令,把用戶的輸入通過echo命令輸出到屏幕

  1. [root@ecs-centos-7 ~]# xargs 
  2. hello 
  3. world 
  4. ! ( ctrl + d ) 
  5. hello world ! 
  6. [root@ecs-centos-7 ~]# 

上面的例子中,輸入xargs 并回車之后,開始接受用戶輸入,用戶輸入 hello world !后,按 ctrl + d 結束輸入,結束之后,屏幕上會輸出用戶輸入的內容

實例2 -d 選項

-d選項可以指定 xargs 命令的分隔符

  1. [root@ecs-centos-7 ~]# echo -n "a#b#c" | xargs echo 
  2. a#b#c 
  3. [root@ecs-centos-7 ~]# echo -n "a#b#c" | xargs -d "#" echo 
  4. a b c 

上面實例中,指定分隔符為 # ,所以 "a#b#c" 就被轉換成了 a b c 三個命令行參數了

實例3 -p 選項

-p選項會打印出將要執行的命令,并且執行命令前做依次是否執行的二次確認,y 表示確認執行,n 表示取消執行

  1. [root@ecs-centos-7 tmp]# echo "a b c" | xargs -p touch 
  2. touch a b c ?...y 
  3. [root@ecs-centos-7 tmp]# ll 
  4. 總用量 0 
  5. -rw-r--r-- 1 root root 0 1月  20 00:46 a 
  6. -rw-r--r-- 1 root root 0 1月  20 00:46 b 
  7. -rw-r--r-- 1 root root 0 1月  20 00:46 c 

實例4 -t 選項

-t 選項打印出最終執行的命令,并且直接執行命令,不再需要用戶二次確認

  1. [root@ecs-centos-7 tmp]# ll 
  2. 總用量 0 
  3. -rw-r--r-- 1 root root 0 1月  20 00:49 a 
  4. -rw-r--r-- 1 root root 0 1月  20 00:49 b 
  5. -rw-r--r-- 1 root root 0 1月  20 00:49 c 
  6. [root@ecs-centos-7 tmp]# echo "a b c" | xargs -t rm 
  7. rm a b c 

實例5 -0 選項

前面我們講過 xargs 命令是以空格或換行為分隔符的,大部分情況下執行都是正常的,但是有一種情況下會出現問題,那就是當文件名中包含空格的時候

含有空格的文件名當作輸入傳給 xargs 的時候,會被 xargs 當作多個命令行參數來處理

下面的例子重現了問題

  1. [tt@ecs-centos-7 tmp]$ ls  
  2. a.txt  b 1.txt  c.txt 
  3. [tt@ecs-centos-7 tmp]$ ls | xargs -t rm 
  4. rm a.txt b 1.txt c.txt  
  5. rm: 無法刪除"b": 沒有那個文件或目錄 
  6. rm: 無法刪除"1.txt": 沒有那個文件或目錄 
  7. [tt@ecs-centos-7 tmp]$ 

例子中,通過 ls 命令知道目錄下有 a.txt b 1.txt c.txt 三個文件

當通過 ls | xargs -t rm 命令來刪除目錄下所有文件的時候發現,a.txt 和 c.txt 都能被正確的刪除,但是 b 1.txt文件名中包含空格,刪除的時候會被當作 b 和 1.txt 兩個文件處理

所以,例子中輸出結果中才會出現 rm: 無法刪除"b": 沒有那個文件或目錄 和 rm: 無法刪除"1.txt": 沒有那個文件或目錄 的錯誤提示

上述的問題可以通過 -0 選項結合find 命令來解決

  1. [tt@ecs-centos-7 tmp]$ ls  
  2. a.txt  b 1.txt  c.txt 
  3. [tt@ecs-centos-7 tmp]$ find . -type f  -print0 | xargs -0 -t rm 
  4. rm ./a.txt ./b 1.txt ./c.txt  
  5. [tt@ecs-centos-7 tmp]$ ll 
  6. 總用量 0 
  7. [tt@ecs-centos-7 tmp]$ 

find 命令的 -print0 選項表示輸出的文件列表以 null 分隔

同時,xargs 命令的 -0 選項表示以 null 作為分隔符

從輸出結果可以看出,-0選項結合find命令可以正確的刪除包含空格的文件名

實例6 -n 選項

有時用戶會輸入多個參數,-n 選項是每次將一行中的多少個參數作為命令行參數

  1. [tt@ecs-centos-7 tmp]$ echo "a b c d e f" | xargs -n 2 
  2. a b 
  3. c d 
  4. e f 
  5. [tt@ecs-centos-7 tmp]$ echo "a b c d e f" | xargs -n 4 
  6. a b c d 
  7. e f 
  8. [tt@ecs-centos-7 tmp]$ 

命令 echo "a b c d e f" | xargs -n 2 指定每2個參數作為一次命令的輸出,所以 a b c d e f 6個參數輸出了3行

同樣的,命令 echo "a b c d e f" | xargs -n 4 指定每4個參數作為一次輸出,所以 a b c d e f 6個參數輸出2行,而且第2行只有兩個參數

實例7 -r 選項

此選項表示,當輸入不包含非空格時,不執行命令,默認情況下,不管輸入是否包含非空格時,都會執行命令

有些命令必須要有操作數,如果輸入不包含任何參數時,執行這些命令會有缺少操作數的錯誤提示,可以加上 -r選項就不會出現錯誤提示了

  1. [tt@ecs-centos-7 tmp]$ echo '' | xargs rm                                                                                              
  2. rm: 缺少操作數 
  3. Try 'rm --help' for more information. 
  4. [tt@ecs-centos-7 tmp]$ echo '' | xargs -r rm                                                                                           
  5. [tt@ecs-centos-7 tmp]$ 

上面的例子中,命令 echo ''的結果作為輸入傳給管道右邊的 xargs rm ,經過參數轉化,xargs rm 沒有任何參數,所以執行 rm 命令時會提示缺少操作數,但是 xargs -r rm 命令是不會執行的,所以它不會有錯誤提示

實例8 -I 參數

-I 參數表示命令行參數的每一項參數的變量

  1. [tt@ecs-centos-7 tmp]$ ls 
  2. a  b  c 
  3. [tt@ecs-centos-7 tmp]$ ls | sort | xargs -I F sh -c 'echo F.txt; touch F.txt'                                                          
  4. a.txt 
  5. b.txt 
  6. c.txt 
  7. [tt@ecs-centos-7 tmp]$ ls 
  8. a  a.txt  b  b.txt  c  c.txt 

上面例子中,當前目錄有 a b c 三個文件

命令 ls | sort | xargs -I F sh -c 'echo F.txt; touch F.txt' 的輸入分別是 a、b、c, -I F表示 F 是輸入參數的替代字符串,執行命令的時候,后面命令 echo F.txt; touch F.txt 中的 F 會被實際的參數替換掉,實際會執行下面幾條命令

  1. echo a.txt; touch a.txt 
  2. echo b.txt; touch b.txt 
  3. echo c.txt; touch c.txt 

小結

本文介紹了 xargs 命令的常見用法,常用的選項都有實例說明,更多關于 xargs 命令的用法請查閱命令文檔

 

責任編輯:武曉燕 來源: Linux開發那些事兒
相關推薦

2021-02-26 08:46:46

PHY寄存器網絡

2019-10-16 09:37:33

流行監控系統

2020-06-28 09:30:37

Linux內存操作系統

2019-02-13 14:15:59

Linux版本Fedora

2021-01-29 08:09:32

Service接口表現層

2021-01-04 08:09:07

Linux內核Watchdog

2025-05-13 07:10:31

2019-03-20 14:29:46

Linux虛擬內存

2021-07-01 19:22:33

腳本Shell參數

2018-06-07 13:17:12

契約測試單元測試API測試

2023-09-22 17:36:37

2021-01-28 22:31:33

分組密碼算法

2020-05-22 08:16:07

PONGPONXG-PON

2024-03-08 09:51:12

Linux網絡性能

2021-12-08 07:31:40

Linux安全病毒

2021-01-08 05:16:01

5G4GRRU

2023-07-26 07:24:07

2020-08-12 08:34:16

開發安全We

2022-11-26 00:00:06

裝飾者模式Component

2022-10-08 11:33:56

邊緣計算云計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: sese视频在线观看 | 日韩免费视频 | 欧美日韩亚洲国产 | 成人在线小视频 | 国产成人一区二区三区 | 麻豆久久久久久 | 一级毛片在线播放 | 在线天堂免费中文字幕视频 | 亚洲伊人a | 在线观看av不卡 | 成人自拍av | 亚洲激情在线观看 | 91视频免费黄 | 亚洲综合一区二区三区 | 日韩电影中文字幕 | 久久久91精品国产一区二区精品 | 中文字幕国产视频 | 中文字幕二区三区 | 亚洲人成人一区二区在线观看 | 一区二区三区视频在线观看 | 四虎影院在线免费观看 | 日韩欧美成人一区二区三区 | 欧美久久国产 | 亚洲av毛片 | 成人国产精品免费观看 | 精彩视频一区二区三区 | 欧美一区二区三区在线观看 | 国产高清在线精品 | 色视频网站 | 午夜精品久久久久久久久久久久 | 欧美日韩久久精品 | 三级视频在线观看 | 激情91| 亚洲国产一区二区三区 | 亚洲精品不卡 | 欧美日韩国产一区二区三区不卡 | 颜色网站在线观看 | 精品久久久久久 | 亚洲欧美中文日韩在线v日本 | 久久一级大片 | 天天操网 |