最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Linux上使用xargs命令的詳細(xì)教程

 更新時間:2020年08月25日 09:21:55   作者:良許Linux  
這篇文章主要介紹了如何在Linux上使用xargs命令,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

大家好,我是良許。

在使用 Linux 時,你是否遇到過需要將一些命令串在一起,但是其中一個命令不接受管道輸入的情況呢?在這種情況下,我們就可以使用 xargs 命令。xargs 可以將一個命令的輸出作為參數(shù)發(fā)送給另一個命令。

在 Linux 中,所有標(biāo)準(zhǔn)的應(yīng)用程序都有與之關(guān)聯(lián)的三個數(shù)據(jù)流。分別是標(biāo)準(zhǔn)輸入流(stdin),標(biāo)準(zhǔn)輸出流(stdout)和標(biāo)準(zhǔn)錯誤流(stderr)。這些流通過文本來運行,我們使用文本將輸入(stdin)發(fā)送到命令,然后響應(yīng)(stdout)將會以文本形式顯示在終端窗口上。錯誤消息也以文本的形式顯示在終端窗口上(stderr)。

Linux 和類 Unix 操作系統(tǒng)的一大功能是可以將一個命令的標(biāo)準(zhǔn)輸出流傳遞到另一個命令的標(biāo)準(zhǔn)輸入流。第一個命令不會管它的輸出是否寫到了終端窗口,第二個命令也不會管它的輸入是否來自鍵盤。

雖然所有 Linux 命令都有三個標(biāo)準(zhǔn)流,但是并不是所有命令都接受另一個命令的標(biāo)準(zhǔn)輸出作為它的標(biāo)準(zhǔn)輸入流的輸入。因此我們無法通過管道將輸入傳給這些命令。

xargs是一個使用標(biāo)準(zhǔn)數(shù)據(jù)流構(gòu)建執(zhí)行管道的命令。通過使用xargs命令我們可以使 echormmkdir 等命令接受標(biāo)準(zhǔn)輸入作為它們的參數(shù)。

xargs命令

xargs接受管道輸入,也可以接受來自文件的輸入。xargs 使用該輸入作為我們指定的命令的參數(shù)。如果我們沒有給xargs指定特定的命令,則默認(rèn)使用 echo。xargs 始終生成單行輸出,即使輸入的數(shù)據(jù)是多行的。

假如我們使用 ls-1(每行列出一個文件)選項,則會得到一列文件名稱:

$ ls -1 ./*.sh

這一命令列出了當(dāng)前目錄中的 Shell 腳本文件。

如果我們將輸出結(jié)果通過管道傳遞給 xargs ,會得到什么樣的效果?

$ ls -1 ./*.sh | xargs

可以看出來,輸出以一長串文本的形式寫到了終端上。由此可見,xargs 可以將輸出作為參數(shù)傳遞給其他命令。

配合wc命令使用xargs

我們可以使用 xargs 命令輕松地讓 wc 命令計算多個文件中的單詞數(shù),字符數(shù)和行數(shù)

$ ls *.c | xargs wc

執(zhí)行結(jié)果如下:

命令運行結(jié)果顯示了每個文件的統(tǒng)計信息以及總數(shù)。

這條命令執(zhí)行了以下操作:

ls列出了所有的 .page 文件,并將該列表傳給了xargs。xargs 將所有文件名傳遞給 wc。wc 將這些文件名作為命令行參數(shù)進(jìn)行處理。

使用帶有確認(rèn)消息的xargs

我們可以使用 -p(交互)選項來讓 xargs 提示我們是否要進(jìn)行下一步的操作。

如果我們通過 xargs 將一串文件名的字符串傳遞給 touch 命令,touch 將創(chuàng)建這些文件。

$ echo 'one two three' | xargs -p touch

終端上顯示將要執(zhí)行的命令,xargs 等待我們輸入 yYnN 并按 Enter 來響應(yīng)。如果只按了 Enter ,則視為 n。只有當(dāng)我們當(dāng)輸入 yY 時才執(zhí)行該命令。

我們按下y和 Enter ,然后使用ls用來檢查文件是否已經(jīng)創(chuàng)建。

$ ls one two three

將xargs與多個命令一起使用

我們可以用-I(初始參數(shù))選項來將 xargs 和多個命令一起使用。這一選項定義了替換字符串。在命令行中的任何出現(xiàn)替換字符串的位置,都會插入我們提供給 xargs 的值 。

有點抽象,我們以一個實例來進(jìn)行講解。

我們先用 tree 命令查看當(dāng)前目錄中的子目錄。該 -d(directory)選項使 tree 命令忽略文件,只輸出目錄。

$ tree -d

現(xiàn)在只有一個子目錄 images 。

在 directories.txt 這個文件中,我們有一些想要創(chuàng)建的目錄的名稱。我們先用 cat 查看其中的內(nèi)容。

$ cat directories.txt

我們把這些內(nèi)容作為輸入數(shù)據(jù)傳給 xargs ,執(zhí)行以下的命令:

$ cat directories.txt | xargs -I % sh -c 'echo %; mkdir %'

這條命令執(zhí)行了以下操作:

cat directories.txt :將 directrories.txt 文件的內(nèi)容(所有要創(chuàng)建的目錄名稱)傳給 xargs。xargs -I % :定義了替換字符串 %。sh -c:啟動一個新的子shell。-c(commond)讓 shell 讀取命令。'echo %; mkdir %':每個都會被替換為 xargs 傳過來的目錄名稱 。echo 命令打印目錄名稱,mkdir 命令創(chuàng)建目錄。

命令執(zhí)行結(jié)果:

我們可以用 tree 驗證已創(chuàng)建是否已創(chuàng)建了目錄。

$ tree -d

將文件復(fù)制到多個位置

我們可以使用 xargs 命令來用一個命令將文件復(fù)制到多個位置。

首先,通過管道將兩個目錄的名稱傳給 xargs 。并且讓 xargs 一次只將其中一個參數(shù)傳遞給正在使用的命令。

想要調(diào)用 cp 兩次,每次各使用兩個目錄中的一個作為命令行參數(shù),我們可以通過將 xargs-n(max number)選項設(shè)置為 1 來實現(xiàn)。

這里還使用了-v(verbose 詳細(xì)信息)選項,讓 cp 反饋正在執(zhí)行的操作。

$ echo ~/dir1/ ~/dir2/ | xargs -n 1 cp -v ./*.c

我們將文件復(fù)制到了兩個目錄,一次復(fù)制一個目錄。cp 反饋了詳細(xì)信息,讓我們看到進(jìn)行了哪些操作。

刪除嵌套目錄中的文件

如果文件名中包含空格或者其他特殊字符(例如換行符),xargs 將無法正確解釋這些文件名。我們可以使用 -0(空終止符)選項來解決這一問題。此時, xargs 將使用 null 字符作為文件名最終的分隔符。

這里我們以 find 命令為例。find 有自己的選項來處理文件名中的空格和特殊字符,即 -print0(全名,空字符)選項。

$ find . -name "*.png" -type f -print0 | xargs -0 rm -v -rf "{}"

這一命令執(zhí)行了以下操作:

find . -name “*.png” :find 將從當(dāng)前目錄中搜索名稱和 *.png 相匹配的對象,type -f 指定了只搜索文件。-print0:名稱將以空字符結(jié)尾,并且保留空格和特殊字符。xargs -0:xargs 也將考慮文件名以空值結(jié)尾,并且空格和特殊字符不會引起問題。rm -v -rf "{}":rm 將反饋正在進(jìn)行的操作(-v),遞歸進(jìn)行操作(-r),不發(fā)送錯誤提示而直接刪除文件(-f)。每個文件名替換 "{}"。

命令執(zhí)行之后,將搜索了所有子目錄,刪除了其中匹配的文件。

刪除嵌套目錄

假設(shè)我們要刪除一組嵌套的子目錄,先用tree進(jìn)行查看。

$ tree -d

$ find . -name "level_one" -type d -print0 | xargs -0 rm -v -rf "{}"

這條命令使用 find 在當(dāng)前目錄中遞歸搜索,搜索的目標(biāo)是名為 level_one 的目錄,然后將目錄名通過xargs傳遞給 rm 。

這個命令和前面的命令之間的區(qū)別是,搜索的項目是最頂層目錄的名稱,而且-type d說明要查找的目錄,而不是文件。

每個目錄的名稱都在刪除時打印出來。我們可以用tree再查看效果:

$ tree -d

所有嵌套的子目錄已刪除了。

刪除一種文件類型以外的所有文件

我們可以使用 findxargsrm 刪除所有類型的文件而只保留一種我們想要保留的類型的文件。這需要提供想要保留的文件類型。

-not 選項讓 find 返回所有與搜索模式不匹配的文件名。我們此時再次使用 xargs-I (初始參數(shù))選項。這次定義的替換字符串為 {} 。這和我們之前使用的替換字符串 % 的效果是相同的。

$ find . -type f -not -name "*.sh" -print0 | xargs -0 -I {} rm -v {}

命令執(zhí)行之后,我們再通過 ls 來確認(rèn)結(jié)果??梢钥吹剑夸浿兄皇O铝伺c *.sh 相匹配的文件。

$ ls -l

使用Xargs創(chuàng)建壓縮文件

我們可以使用 find 命令來搜索文件,并通過 xargs 將文件名傳給 tar 命令來創(chuàng)建壓縮文件。

我們將在當(dāng)前目錄中搜索 * .sh 文件。

$ find ./ -name "*.sh" -type f -print0 | xargs -0 tar -cvzf script_files.tar.gz

命令執(zhí)行結(jié)果將列出了所有 .sh 文件,并創(chuàng)建了壓縮文件。

總結(jié)

到此這篇關(guān)于如何在Linux上使用xargs命令的文章就介紹到這了,更多相關(guān)Linux上使用xargs命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux目錄結(jié)構(gòu)分解及意義和建議

    Linux目錄結(jié)構(gòu)分解及意義和建議

    初學(xué)Linux,首先需要弄清Linux目錄結(jié)構(gòu),每一個目錄的具體作用、存放哪些文件等。下面我們就來分析一下Linux的標(biāo)準(zhǔn)目錄結(jié)構(gòu)
    2014-03-03
  • 在Linux環(huán)境如何將python腳本打deb包

    在Linux環(huán)境如何將python腳本打deb包

    為方便傳輸和使用Python腳本,可以將其制作成deb包。本文詳細(xì)介紹了在uos系統(tǒng)下使用debian目錄和相關(guān)文件來定制和構(gòu)建deb包,涵蓋創(chuàng)建配置文件、修改文件、設(shè)置安裝和鏈接規(guī)則等步驟,并提供了打包命令。這樣可以簡化腳本的分發(fā)和安裝過程,使其更加便捷
    2024-09-09
  • linux下Vps自動備份web和mysql數(shù)據(jù)庫的腳本

    linux下Vps自動備份web和mysql數(shù)據(jù)庫的腳本

    這篇文章主要介紹了vps下web與mysql數(shù)據(jù)庫的備份方法,需要的朋友可以參考下
    2012-05-05
  • linux nohup及tail-f用法

    linux nohup及tail-f用法

    這篇文章給大家分享了linux nohup及tail-f用法相關(guān)內(nèi)容,有興趣的朋友可以參考學(xué)習(xí)下。
    2018-07-07
  • time_t tm timeval 和 時間字符串的轉(zhuǎn)換方法

    time_t tm timeval 和 時間字符串的轉(zhuǎn)換方法

    下面小編就為大家?guī)硪黄猼ime_t tm timeval 和 時間字符串的轉(zhuǎn)換方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 如何解決win10與Ubuntu16.04時間不同步的問題的方法

    如何解決win10與Ubuntu16.04時間不同步的問題的方法

    本篇文章主要介紹了如何解決win10與Ubuntu16.04時間不同步的問題的方法,非常具有實用價值,需要的朋友可以參考下
    2017-05-05
  • Centos系統(tǒng)中用mock構(gòu)建rpm的方法

    Centos系統(tǒng)中用mock構(gòu)建rpm的方法

    這篇文章主要給大家介紹了在Centos系統(tǒng)中用mock構(gòu)建rpm的方法,文中給出了詳細(xì)的命令代碼,相信對大家的理解和學(xué)習(xí)具有一定的參考借鑒家價值,有需要的朋友們下面來一起看看吧。
    2016-12-12
  • apache2.2和php5.2.17在windows下整合過程的錯誤解決方法

    apache2.2和php5.2.17在windows下整合過程的錯誤解決方法

    照理來說apache和php的整合應(yīng)該是非常簡單的,apache下載windows安裝版本后一路next即可完成安裝,php下載解壓版本后直接解壓到指定目錄,然后在apache的配置文件httpd.conf的最后加入如下幾行即可
    2011-08-08
  • Virtualbox安裝Lubuntu 18.04 64位的圖文教程

    Virtualbox安裝Lubuntu 18.04 64位的圖文教程

    這篇文章主要為大家詳細(xì)介紹了Virtualbox安裝Lubuntu 18.04 64位的圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • KVM與Xen虛擬化技術(shù)深度對比分析

    KVM與Xen虛擬化技術(shù)深度對比分析

    文章比較了Xen和KVM兩種虛擬化技術(shù)的架構(gòu)設(shè)計、性能指標(biāo)、安全與隔離機(jī)制、生態(tài)系統(tǒng)適配、運維復(fù)雜度等,最終建議在云原生場景下優(yōu)先選擇KVM,而在對安全性要求極高的傳統(tǒng)企業(yè)場景下,Xen仍具有一定的優(yōu)勢
    2025-02-02

最新評論

九龙县| 江陵县| 安化县| 康乐县| 双柏县| 两当县| 台东县| 大荔县| 东莞市| 奉贤区| 上饶市| 齐河县| 华池县| 瓮安县| 怀柔区| 青海省| 新乐市| 日照市| 来安县| 松阳县| 沅江市| 连平县| 无棣县| 赤城县| 津南区| 安图县| 营口市| 甘谷县| 富锦市| 永城市| 广宗县| 涪陵区| 尉犁县| 塔河县| 惠安县| 桂林市| 长垣县| 西乌珠穆沁旗| 邻水| 益阳市| 江华|