日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

每天学一点儿shell:xargs 命令

發布時間:2025/3/19 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每天学一点儿shell:xargs 命令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、標準輸入和管道
  • 二、xargs命令的作用
  • 三、xargs命令的實例
    • 1、創建多個文件目錄
    • 2、多行內容變單行輸出
    • 3、將內容按照","分隔
    • 4、找到所有的txt文件并壓縮
    • 5、找到所有的txt文件并刪除(慎用)
    • 6、配合ps和kill批量殺掉進程(實用)
    • 7、配合cp將文件拷貝到多個目錄(實用)

一、標準輸入和管道

舉一個例子:

[root@hadoop-master test-grep]# cat -n ./file.txt | grep leo1 leo hello2 leo2 hello23 leo3 hello3

上面這個例子使用了管道命令(|),管道命令的作用是將左側的命令(cat -n ./file.txt )的標準輸出作為右邊的標準輸入,提供給右邊的命令(grep leo)作為參數。因此上面的代碼等同于如下:

[root@hadoop-master test-grep]# grep -n leo file.txt 1:leo hello 2:leo2 hello2 3:leo3 hello3

但是大多數命令都不接收標準輸入作為參數,只能直接在命令行輸入參數,這導致無法用管道命令傳遞參數。
例如下面的語句是沒有任何輸出的

[root@hadoop-master test-grep]# echo "leo" | echo[root@hadoop-master test-grep]#

二、xargs命令的作用

xargs命令的作用,是將標準輸入轉為命令行參數。

[root@hadoop-master test-grep]# echo "leo" | xargs echo leo

xargs命令格式如下:

xargs [OPTION]... COMMAND INITIAL-ARGS...

整整執行的命令是緊跟在xargs后面的COMMAND,接收xargs傳來的參數
例如:

[root@hadoop-master test-grep]# echo "one two three" | xargs mkdir [root@hadoop-master test-grep]# ll 總用量 8 drwxrwxrwx. 2 root root 22 9月 22 16:53 dir2 -rwxrwxrwx. 1 root root 60 9月 22 16:48 file2.text -rwxrwxrwx. 1 root root 45 9月 21 23:07 file.txt drwxr-xr-x. 2 root root 6 9月 26 17:42 one drwxr-xr-x. 2 root root 6 9月 26 17:42 three drwxr-xr-x. 2 root root 6 9月 26 17:42 two

上面這個命令是創建one two three 三個目錄,如果不加xargs會報如下錯誤:

[root@hadoop-master test-grep]# echo "one two three" | mkdir mkdir: 缺少操作數 Try 'mkdir --help' for more information. 選項解釋
-afile 從文件中讀入作為sdtin
-eflag ,注意有的時候可能會是-E,flag必須是一個以空格分隔的標志,當xargs分析到含有flag這個標志的時候就停止。
-p當每次執行一個argument的時候詢問一次用戶。
-nnum 后面加次數,表示命令在執行的時候一次用的argument的個數,默認是用所有的。
-t表示先打印命令,然后再執行。
-i或者是-I,這得看linux支持了,將xargs的每項名稱,一般是一行一行賦值給 {},可以用 {} 代替。
-rno-run-if-empty 當xargs的輸入為空的時候則停止xargs,不用再去執行了。
-snum 命令行的最大字符數,指的是 xargs 后面那個命令的最大命令行字符數。
-Lnum 從標準輸入一次讀取 num 行送給 command 命令。
-l同 -L。
-ddelim 分隔符,默認的xargs分隔符是回車,argument的分隔符是空格,這里修改的是xargs的分隔符。
-xexit的意思,主要是配合-s使用。。
-P修改最大的進程數,默認是1,為0時候為as many as it can ,這個例子我沒有想到,應該平時都用不到的吧。

三、xargs命令的實例

1、創建多個文件目錄

[root@hadoop-master test-grep]# echo "one two three" | mkdir

遞歸創建多個文件目錄:

[root@hadoop-master dir1]# echo "dir1/20201011 dir2/20201011 dir3/20201011"|xargs mkdir -p

2、多行內容變單行輸出

[root@hadoop-master test-grep]# cat file.txt leo hello leo2 hello2 leo3 hello3 hello grep [root@hadoop-master test-grep]# cat file.txt | xargs leo hello leo2 hello2 leo3 hello3 hello grep

3、將內容按照","分隔

[root@hadoop-master test-grep]# echo "leo,leo,leo" | xargs -d',' leo leo leo

4、找到所有的txt文件并壓縮

[root@hadoop-master test-grep]# find . -type f -name "*.txt" -print | xargs tar -czvf txts.tar.gz ./file.txt ./dir2/file.txt

5、找到所有的txt文件并刪除(慎用)

[root@hadoop-master test-grep]# find . -type f -name "*.txt" -print0 | xargs -0 rm -f

刪除符合條件的目錄下文件,目錄結構如下,需要刪除時間是20201011下的文件:

[root@hadoop-master dir1]# tree . ├── dir1 │ └── 20201011 ├── dir2 │ ├── 20201011 │ │ └── file2.txt │ ├── 20201012 │ │ └── file2.txt │ └── 20201013 │ └── file2.txt └── dir3└── 20201011└── file.txt

命令如下:

[root@hadoop-master dir1]# find . -type f -name "*.txt" -print0 | grep -FzZ '20201011' | xargs -0 rm -f [root@hadoop-master dir1]# tree . ├── dir1 │ └── 20201011 ├── dir2 │ ├── 20201011 │ ├── 20201012 │ │ └── file2.txt │ └── 20201013 │ └── file2.txt └── dir3└── 20201011

如果沒有tree命令,可以使用yum下載一個:

[root@hadoop-master dir1]# yum install tree

6、配合ps和kill批量殺掉進程(實用)

[root@hadoop-master test-grep]# ps -ef|grep -v 'grep'|grep '測試程序'|awk '{print $2}'|xargs kill -9

7、配合cp將文件拷貝到多個目錄(實用)

[root@hadoop-master BJ]# echo 20201011 20201012 20201013 | xargs -n 1 cp -v ./test01.txt

打印結果:

20201011、20201012、20201013 是三個目錄,。/test01.txt代表需要復制的文件
-n 1 :表示每一個命令行只有一個參數,并且傳給cp命令
cp :表示復制命令
-v:verbose表示將復制過程中的詳細信息顯示出來

當然可以正則匹配目錄和文件名:

[root@hadoop-master dir1]# echo */20201011 | xargs -n 1 cp -v ./*.txt "./file1.txt" -> "dir1/20201011/file1.txt" "./file2.txt" -> "dir1/20201011/file2.txt" "./file1.txt" -> "dir2/20201011/file1.txt" "./file2.txt" -> "dir2/20201011/file2.txt" "./file1.txt" -> "dir3/20201011/file1.txt" "./file2.txt" -> "dir3/20201011/file2.txt"

總結

以上是生活随笔為你收集整理的每天学一点儿shell:xargs 命令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。