一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統 - Linux - Linux基礎之xargs命令的入門實例

Linux基礎之xargs命令的入門實例

2022-02-24 17:29程序猿小卡_casper Linux

你是否遇到過這樣的情況,需要一遍又一遍地對多個文件執行同樣的操作?如果有那你肯定會深有感觸這是多么的無聊和效率低下。還好有種簡單的方式,可以使用xargs命令解決這個煩惱。本文介紹了Linux基礎學習之xargs命令入門的

簡介

xargs命令有兩個要點。第一,你必須列出目標文件。第二,你必須指定對每個文件需要執行的命令或腳本。

xargs命令被用來處理分布在不同目錄下的文件:

  • 計算所有文件的行數
  • 打印指定文件的第一行
  • 對每個文件執行一個自定義腳本

xargs可以將輸入內容(通常通過命令行管道傳遞),轉成后續命令的參數,通常用途有:

  • 命令組合:尤其是一些命令不支持管道輸入,比如ls。
  • 避免參數過長:xargs可以通過-nx來將參數分組,避免參數過長。

使用語法如下

?
1
2
Usage: xargs [OPTION]... COMMAND INITIAL-ARGS...
Run COMMAND with arguments INITIAL-ARGS and more arguments read from input.

入門例子

首先,創建測試文件

?
1
touch a.js b.js c.js

接著,運行如下命令:

?
1
ls *.js | xargs ls -al

輸出如下:

?
1
2
3
-rw-r--r-- 1 a wheel 0 12 18 16:18 a.js
-rw-r--r-- 1 a wheel 0 12 18 16:18 b.js
-rw-r--r-- 1 a wheel 0 12 18 16:18 c.js

命令解釋:

  • 首先,ls *.js的輸出為a.js b.js c.js。
  • 通過管道,將a.js b.js c.js作為xargs的輸入參數。
  • xargs命令收到輸入參數后,對參數進行解析,以空格/換行作為分隔符,拆分成多個參數,這里變成a.js、b.js、c.js。
  • xargs將拆分后的參數,傳遞給后續的命令,作為后續命令的參數,也就是說,組成這樣的命令ls -al a.js b.js c.js。

可以加上-t參數,在執行后面的命令前,先將命令打印出來。

?
1
ls *.js | xargs -t ls -al

輸出如下,可以看到多了一行內容ls -al a.js b.js c.js,這就是實際運行的命令。

?
1
2
3
4
ls -al a.js b.js c.js
-rw-r--r-- 1 a wheel 0 12 18 16:18 a.js
-rw-r--r-- 1 a wheel 0 12 18 16:18 b.js
-rw-r--r-- 1 a wheel 0 12 18 16:18 c.js

例子:參數替換

有的時候,我們需要用到原始的參數,可以通過參數-i或-I實現。參數說明如下

?
1
2
3
4
-I R  same as --replace=R (R must be specified)
-i,--replace=[R] Replace R in initial arguments with names
 read from standard input. If R is
 unspecified, assume {}

例子如下,將所有的.js結尾的文件,都加上.backup后綴。-I '{}'表示將后面命令行的{}替換成前面解析出來的參數。

?
1
ls *.js | xargs -t -I '{}' mv {} {}.backup

展開后的命令如下:

?
1
2
3
mv a.js a.js.backup
mv b.js b.js.backup
mv c.js c.js.backup

例子:參數分組

命令行對參數最大長度有限制,xargs通過-nx對參數進行分組來解決這個問題。

首先,創建4個文件用來做實驗。

?
1
touch a.js b.js c.js d.js

然后運行如下命令:

?
1
ls *.js | xargs -t -n2 ls -al

輸出如下,-n2表示,將參數以2個為一組,傳給后面的命令。

?
1
2
3
4
5
6
ls -al a.js b.js
-rw-r--r-- 1 root root 0 Dec 18 16:52 a.js
-rw-r--r-- 1 root root 0 Dec 18 16:52 b.js
ls -al c.js d.js
-rw-r--r-- 1 root root 0 Dec 18 16:52 c.js
-rw-r--r-- 1 root root 0 Dec 18 16:52 d.js

例子:特殊文件名

有的時候,文件名可能存在特殊字符,比如下面的文件名中存在空格。

?
1
touch 'hello 01.css' 'hello 02.css'

運行之前的命令會報錯,因為xargs是以空格/換行作為分隔符,于是就會出現預期之外的行為。

?
1
2
3
4
5
6
7
8
# 命令
find . -name '*.css' | xargs -t ls -al
#輸出
ls -al ./hello 01.css ./hello 02.css # 展開后的命令
ls: cannot access ./hello: No such file or directory
ls: cannot access 01.css: No such file or directory
ls: cannot access ./hello: No such file or directory
ls: cannot access 02.css: No such file or directory

xargs是這樣解決這個問題的。

  • -print0:告訴find命令,在輸出文件名之后,跟上NULL字符,而不是換行符;
  • -0:告訴xargs,以NULL作為參數分隔符;
?
1
find . -name '*.css' -print0 | xargs -0 -t ls -al

例子:日志備份

將7天前的日志備份到特定目錄

?
1
find . -mtime +7 | xargs -I '{}' mv {} /tmp/otc-svr-logs/

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

相關鏈接

https://craftsmanbai.gitbooks...

http://wiki.jikexueyuan.com/p...

原文鏈接:https://segmentfault.com/a/1190000012566053

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 脱jk裙的美女露小内内无遮挡 | 九九精品国产亚洲A片无码 九九99热久久999精品 | 四大美女思春艳史片 | 日韩人成免费网站大片 | 我和么公的秘密小说免费 | 欠操h | 韩国久久 | 免费被靠视频动漫 | 免费观看美女被cao视频 | 91精品91久久久久久 | 国产麻豆剧果冻传媒观看免费视频 | 糖心在线观看 | 亚洲国产成人精品无码区5566 | 2022日韩理论片在线观看 | 欧美性bbbbbxxxxxxx | 精品丰满人妻无套内射 | 性色视频免费 | fuqer日本| 视频网站入口在线看 | 国产精品啪啪 | 久久夜色噜噜噜亚洲AV0000 | 北条麻妃黑人正在播放 | 久久不卡免费视频 | 跪在老师脚下吃丝袜脚 | 欧美人畜 | 丰满岳乱妇在线观看视频国产 | 日本漫画被黄漫免费动 | 久久永久免费视频 | 情欲综合网 | 国产精品边做边接电话在线观看 | 精品国产乱码久久久久久免费 | caopo视频进入离开 | 国产91在线九色 | 我和岳偷长篇小说 | 无码人妻丰满熟妇啪啪网不卡 | 福利三区 | 国产盗摄美女嘘嘘视频 | 国产一区二区精品久久91 | 好大好热 | 国产成人精品一区二三区 | 国产清纯白嫩大学生正在播放 |