如何在linux上使用xargs命令

需要將一些Linux命令串在一起,但其中一個不接受管道輸入?xargs可以獲取一個命令的輸出,並將其作為引數傳送到另一個命令。...

需要將一些Linux命令串在一起,但其中一個不接受管道輸入?xargs可以獲取一個命令的輸出,並將其作為引數傳送到另一個命令。

所有標準Linux實用程式都有三個與之相關聯的資料流。它們是標準輸入流(stdin)、標準輸出流(stdout)和標準錯誤流(stderr)。

這些流處理文字。我們使用文字向命令傳送輸入(stdin),響應(stdout)作為文字寫入終端視窗。錯誤訊息也作為文字(stderr)寫入終端視窗。

Linux和類Unix作業系統的一個重要特性是能夠將一個命令的stdout輸出透過管道傳輸到第二個命令的stdin輸入。第一個命令不關心它的輸出是否沒有傳送到終端視窗,第二個命令不關心它的輸入是否來自鍵盤。

儘管所有的Linux命令都有三個標準流,但並不是所有的命令都接受另一個命令的stdout作為其stdin的輸入。這意味著你不能透過管道輸入到它們。

xargs是使用標準資料流構建執行管道的命令。透過使用xargs,我們可以使echo、rm和mkdir等命令接受標準輸入作為引數。

xargs命令

xargs將接受管道輸入。它還可以接受來自檔案的輸入。xargs將該輸入用作命令的引數,我們已經告訴它要處理這些命令。如果我們不告訴xargs使用特定的命令,它將預設使用echo。

我們可以用它來演示xargs如何總是生成一行輸出,即使是從多行輸入。

如果將-1(每行列出一個檔案)選項與ls一起使用,則會得到一列檔名。

ls -1 ./*.sh

如何在linux上使用xargs命令

這將列出當前目錄中的shell指令碼檔案。

如何在linux上使用xargs命令

我們得到了一個預期的列。如果我們把它透過沙爾格管,我們能得到什麼?

ls -1 ./*.sh | xargs

如何在linux上使用xargs命令

輸出作為一個長文字流寫入終端視窗。

如何在linux上使用xargs命令

正是這個功能讓xargs將引數輸入到其他命令中。

將xargs與wc一起使用

我們可以使用xargs輕鬆地讓wc計算多個檔案中的單詞、字元和行。

ls *.page | xargs wc

如何在linux上使用xargs命令

事情就是這樣:

  • ls列出*.page檔案並將列表傳遞給xargs。
  • xargs將檔名傳遞給wc。
  • wc將檔名視為命令列引數。

如何在linux上使用xargs命令

每個檔案的統計資訊與總體總數一起顯示。

使用帶確認的xargs

我們可以使用-p(互動式)選項讓xargs提示我們確認我們很高興它繼續進行。

如果我們透過xargs傳遞一個檔名字串給touch,touch將為我們建立檔案。

echo 'one two three' | xargs -p touch

如何在linux上使用xargs命令

將顯示要執行的命令,xargs透過鍵入“y”或“y”、或“n”或“n”並按Enter鍵等待我們做出響應。

如果您只需按Enter鍵,它將被視為“n”。僅當鍵入“y”或“y”時才執行該命令。

如何在linux上使用xargs命令

我們按“y”鍵,然後按回車鍵。我們可以使用ls檢查檔案是否已建立。

ls one two three

如何在linux上使用xargs命令

將xargs與多個命令一起使用

透過使用-I(初始引數)選項,我們可以對xargs使用多個命令。

此選項定義一個“替換字串”。只要替換字串的標記出現在命令列中,就會**提供給xargs的值。

讓我們使用tree命令檢視當前目錄中的子目錄。-d(directory)選項使樹忽略檔案,只報告目錄。

tree -d

如何在linux上使用xargs命令

只有一個子目錄叫做“images”

在一個名為“的檔案中”目錄.txt,我們有一些希望建立的目錄的名稱。我們可以用cat檢視它的內容。

cat directories.txt

如何在linux上使用xargs命令

我們將使用它作為xargs的輸入資料。我們的命令是:

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

這種情況如下:

  • 貓目錄.txt|:這將推送目錄.txt將檔案(所有新目錄名)放入xargs。
  • xargs-I%:這定義了一個“replace string”和標記“%”。
  • sh-c:這將啟動一個新的子shell。c(命令)告訴shell從命令列讀取命令。
  • 'echo%;mkdir%':每個“%”標記將被xargs傳遞的目錄名替換。echo命令將列印目錄名;mkdir命令將建立目錄。

如何在linux上使用xargs命令

目錄被逐一列出。

如何在linux上使用xargs命令

我們可以再次使用tree來驗證目錄是否已建立。

tree -d

如何在linux上使用xargs命令

將檔案複製到多個位置

我們可以使用xargs來允許我們用一個命令將檔案複製到多個位置。

我們將把兩個目錄的名稱作為輸入引數匯入xargs。我們將告訴xargs一次只將這些引數中的一個傳遞給它正在使用的命令。

在本例中,命令是cp。因此效果是呼叫cp兩次,每次呼叫兩個目錄中的一個作為命令列引數。允許這種情況發生的xargs引數是-n(max number)選項。我們要把這個設定成一個。

我們還在cp中使用-v(verbose)選項,以便它報告正在發生的事情。

echo ~/Backups/ ~/Documents/page-files/ | xargs -n 1 cp -v ./*.page

如何在linux上使用xargs命令

檔案被複制到兩個目錄,一次一個目錄。cp報告每個檔案複製操作,以便我們可以看到它們的發生。

如何在linux上使用xargs命令

刪除巢狀目錄中的檔案

如果檔名中有空格和奇怪的字元(如換行符),xargs將無**確解釋它們。我們可以透過使用-0(空終止符)選項來克服這個問題。這告訴xargs使用空字元作為檔名的最終分隔符。

我們將在這個例子中使用find。find有自己的選項來處理檔名中的空白和奇怪字元。它是-print0(全名,空字元)選項。

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

這種情況如下:

  • 找到。-name“*.png”:find將從當前目錄“.”中搜索名稱與“*.png”匹配的物件,即檔案(type-f)。
  • -print0:名稱將以空字元結尾,空格和奇怪字元將被滿足。
  • xargs-0:xargs還將考慮檔名以null結尾,空格和奇怪的字元不會引起問題。
  • rm-v-rf“{}”:rm將變得冗長,並報告正在發生的事情(-v)。它將是遞迴的(-r)並檢視巢狀的子目錄,並且將在不提示(-f)的情況下刪除檔案。“{}”被每個檔名替換。

如何在linux上使用xargs命令

將搜尋所有子目錄,並刪除與搜尋模式匹配的檔案。

如何在linux上使用xargs命令

刪除巢狀目錄

假設我們要刪除一組巢狀的子目錄。樹會讓我們看到它們的。

tree -d

如何在linux上使用xargs命令

find . -name "level_one" -type d printo | xargs -o rm -v -rf "{}"

此命令將使用find在當前目錄中遞迴搜尋。搜尋目標是一個名為“level\ u one”的目錄。目錄名透過xargs傳遞給rm。

如何在linux上使用xargs命令

此命令與上一個命令之間唯一重要的更改是,搜尋項是最頂層目錄的名稱,-type d告訴find查詢目錄,而不是檔案。

如何在linux上使用xargs命令

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

tree -d

如何在linux上使用xargs命令

所有巢狀的子目錄都將被刪除。

刪除除一種檔案型別以外的所有檔案

我們可以使用find、xargs和rm刪除除要保留的型別之外的所有檔案。這有點違反直覺,但我們提供了希望保留的檔案型別的名稱,而不是要刪除的檔案型別的名稱。

not選項告訴find返回與搜尋模式不匹配的檔名。我們再次對xargs使用-I(初始引數)選項。這次我們定義的替換字串標記是“{}”。這與我們之前生成的replace string令牌的行為完全相同,它恰好是一個“%”。

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

如何在linux上使用xargs命令

我們可以和ls核實一下。目錄中只剩下與“*.sh”搜尋模式匹配的檔案。

ls -l

如何在linux上使用xargs命令

使用xargs建立存檔檔案

我們可以使用find來搜尋檔案,並將它們透過xargs傳遞給tar,從而建立一個歸檔檔案。

我們要在當前目錄中搜索。搜尋模式是“*.page”,所以我們要查詢“.page”檔案。

find ./ - name "*.page" -type f -print0 | xargs -0 -tar -cvzf page_files.tar.gz

如何在linux上使用xargs命令

在建立存檔檔案時,將按預期列出這些檔案。

如何在linux上使用xargs命令

資料中介

有時你需要一個小腳手架當你把東西堆在一起。xargs架起了可以輸出資訊的命令和不能接收資訊的命令之間的橋樑。

xargs和find都有大量的選項。我們鼓勵您檢視他們的手冊頁以瞭解更多資訊。

  • 發表於 2021-04-03 07:25
  • 閱讀 ( 36 )
  • 分類:網際網路

你可能感興趣的文章

如何在linux上安裝和使用powershell

... 在本文中,我將向您展示如何在Linux上安裝、執行和使用PowerShell! ...

  • 發佈於 2021-03-16 02:34
  • 閲讀 ( 53 )

如何在android和termux上使用linux命令列

...許您在Android裝置上安裝誠實善良的Linux應用程式。下面是如何使用Termux應用程式。 ...

  • 發佈於 2021-03-18 07:26
  • 閲讀 ( 63 )

如何在windows10上獲得linux bash shell

... 如何在windows10上安裝linux bash shell ...

  • 發佈於 2021-03-21 11:48
  • 閲讀 ( 60 )

linux下如何重新命名檔案

要在Linux中重新命名檔案嗎?如果您知道如何在Windows、macOS或Chrome作業系統中完成這項工作,那麼您就知道如何在這裡完成這項工作。在大多數版本的Linux上,您只需右鍵單擊一個檔案並選擇Rename選項。 ...

  • 發佈於 2021-03-22 02:48
  • 閲讀 ( 67 )

linux正在吃掉你的公羊嗎?如何管理你的記憶

...記憶體。為了理解到底發生了什麼,我們必須看看Linux是如何管理記憶體的。 ...

  • 發佈於 2021-03-23 08:31
  • 閲讀 ( 57 )

如何在linux上使用groupadd管理使用者組

... 相關:如何在Linux中更改密碼 ...

  • 發佈於 2021-03-26 17:15
  • 閲讀 ( 43 )

如何在linux中新增使用者

想在Linux系統上新增使用者但不知道如何新增?在Linux上使用命令列介面管理使用者無疑是一項複雜的工作。而對於初學者來說,即使新增新使用者也是一場噩夢。 ...

  • 發佈於 2021-03-26 23:29
  • 閲讀 ( 69 )

如何檢查linux核心和作業系統版本

...版本可以讓您對安全更新做出重要決定。我們將向您展示如何找到這些,無論您使用哪個發行版。 滾動和點釋放 你知道你在執行哪個版本的Linux嗎?你能找到核心版本嗎?Linux的滾動發行版,如Arch、Manjaro和openSUSE,經常使用自...

  • 發佈於 2021-04-01 13:11
  • 閲讀 ( 51 )

為什麼linux的systemd在這麼多年後仍然存在分歧

...在和以前一樣具有分裂性。儘管許多主要的Linux發行版都使用它,但鐵桿反對者並沒有鬆懈。 linux引導序列 開啟計算機電源後,硬體將引導,然後(根據計算機使用的引導扇區型別)執行主引導記錄(MBR)或執行統一可擴充套...

  • 發佈於 2021-04-02 02:56
  • 閲讀 ( 44 )

如何在linux上使用history命令

...複您過去執行的命令。一旦您瞭解了Linux history命令以及如何使用它,它就可以顯著地提高您的生產效率。 操縱歷史 正如喬治桑塔亞納(georgestantayana)的一句名言:“那些記不住過去的人註定要重蹈覆轍。”不幸的是,在Linux...

  • 發佈於 2021-04-02 18:17
  • 閲讀 ( 51 )
qvkw0305412
qvkw0305412

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦