tft每日頭條

 > 生活

 > linux中find命令用法大全

linux中find命令用法大全

生活 更新时间:2024-08-19 04:13:06

find是日常工具箱中功能強大、靈活的命令行程序之一。可以借助-exec或者-delete之類的參數,讓它對找到的文件進行操作。find命令可以執行命令或者動作,find 可以借助選項-exec與其他命名進行結合。-exec算得上是find最強大的特性之一。

我們可以用管道将一個命令的stdout(标準輸出)重定向到另一個命令的stdin(标準輸入)。例如:cat 123.txt|grep "test"。但是,有些命令隻能以命令行參數的形式接受數據,而無法通過stdin接受數據流。這種情況下,是沒法用管道來提供那些隻有通過命令行參數才能提供的數據。

xargs是一個很有用的命令(execute arguments),它擅長将标準輸入數據轉換成命令行參數。xargs能夠處理stdin并将其轉換為特定命令的命令行參數,xargs也可以将單行或者多行文本輸入轉換成其他格式,例如單行變多行或者多行變單行。單行命令是一個命令序列,各命令之間不使用分号,而是使用管道操作符進行連接。精心編寫的單行命令可以更高效、更簡捷地完成任務。需要具備紮實的理論和實踐才能夠寫出适合的單行命令解決方法。

xargs就是構建單行命令的重要組件之一。xargs命令應該緊跟在管道操作符之後,它以标準輸入作為主要的源數據流,并且使用stdin通過提供命令行參數來執行其他命令。例如:command|xargs。xargs可以作為一種替換方式,作用類似于find命令中的-exec參數。

find . -type f -name "dnf.log" -exec more {} \;

這裡{}是一個特殊的字符串,與-exec選項結合使用。對于每一個匹配的文件,{}會被替換成相應的文件名。

-exec參數是以分号為結束标志的,考慮到各個系統中分号有不同的含義,所以前面加上反斜杠\;

在使用find命令的-exec選項處理匹配到的文件時,find命令将所有匹配到的文件一起傳遞給exec執行。有些系統對能夠傳遞給exec的命令長度有限制,這樣find命令運行幾分鐘之後,就會出現溢出錯誤。

在find命令-exec參數中,我們無法在-exec參數中使用多個命令,它隻能接受單個命令。不過可以耍一個小花招,把多個命令寫入一個shell腳本中,比如command.sh。然後在-exec中使用這個腳本:

-exec ./command.sh {} \; find . -name "*.txt" -exec rm {} \; find . -name "*.txt"|xargs rm {}

-exec

1.參數是一個一個傳遞的,傳遞一個參數執行一次rm

2.文件名有空格等特殊字符也能處理

3.find ...-exec rm {} \;因為rm是以類似for循環的方式去逐個處理的,沒有類似xargs因為參數數量過多執行失敗的情況。

-xargs

1.一次将參數傳給命令,可以使用-n控制參數個數。xargs 會默認以-n為5000,即5000個參數一組。

2.處理特殊文件需要采用如下方式:

find . -name "*.txt" print0 | xargs -0 rm {}

3.xargs是通過緩沖方式以前面命令行的輸出作為參數,随後的命令調用該參數。優點是采用緩沖方式批處理數據,執行效率比較高。缺點是有可能參數數量過多(成千上萬),導緻後面的命令執行失敗。

linux中find命令用法大全(Linux中的find與xargs用法)1

美麗山河

鼓勵話語:博觀而約取,厚積而薄發!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved