天天看點

Linux指令(三)find,xargs1.find2.xargs

本篇記錄2個指令,分别是:find,xargs

1.find

作用: 按檔案結構周遊搜素,找到符合條件的檔案并按照相應的操作來展現

格式:

預設路徑是在目前目錄,列印資訊用-print

expression包含幾個因素:操作,操作數,測試表達式,動作

parameter function
-name 按名稱尋找檔案
-exec 找到檔案後再執行exec指令後面的操作
-type 按類型查找檔案
-print 輸出找到的檔案的資訊
-user 按所有者(檔案的主人)來查找檔案
-mtime -n +n 根據修改時間找到檔案

1.1按普通的條件查找

使用例子:

1.列印目前路徑下的檔案的資訊,隻列印前十條

find . -print |head -10
           

2.列印目前路徑下以.txt結尾的檔案的資訊

find . -name "*.txt" -print |head -10 
           

這裡不用type,因為type是關于幫助檔案,可執行檔案之類的定義的,跟pdf,txt這種檔案類型不一樣,在詳細資訊中可以找到

3.列印目前路徑下以.txt結尾或者以.pdf的檔案的資訊

4.列印目前路徑下除了以.txt結尾的檔案的資訊

find . ! -name "*.txt" -print |head -10 
           

-print可以不要,結果一樣的

Linux指令(三)find,xargs1.find2.xargs

5.按檔案類型查找檔案

查找普通檔案

補充知識: 關于檔案的類型如下:

parameter function
-f 普通檔案
-l symbolic link file符号連結檔案
-d directory 目錄

6.按修改時間查找檔案,超找48小時内修改過的檔案

find -atime -2
           

7.按照目錄和檔案權限來查找檔案,查找/home/ling目錄下 權限為 777的檔案

find /home/ling -perm 777
           

8.列印目前目錄下所有以txt結尾的符号連結檔案

8.列印目前目錄下所有以php結尾的,權限是777的普通檔案

find . -type f -name "*.php" -perm 777
           

9.列印目前目錄下所有root持有的檔案

find . -type f -user  root
           

10.列印目前目錄下所有權限不是777也不是644的普通檔案

注意777不可寫成"777"

(待完成:準備檔案時,修改權限無效的解決辦法)

1.2 查找後執行指令 -exec

1.ls -l指令放在find指令的-exec選項中

2.在目錄中查找更改時間在2日以前的檔案并删除它們

**備注:**2天以内的用-2

3.在目錄中查找更改時間在2日以前的檔案并删除它們,在删除之前先給出提示

-ok是-exec的安全模式,每次執行前都會提示

4.-exec中使用grep指令,先比對所有檔案名為“ passwd*”的檔案,例如passwd、

passwd.old、passwd.bak,然後執行grep指令看看在這些檔案中是否存在一個root使用者

5.查找檔案移動到指定目錄home/ling

6.用exec選項執行cp指令

7.将所有.c檔案中的代碼合并到all.c

注意指令和其他符号之間要有間隔,比如cat 和{}之間,不然就會被識别成一串的

8.當指令行較多時可以将exec腳本放入檔案,然後執行檔案。請寫出找到目前所有的.c檔案後,列印第一個檔案,并将它合并到all.c,列印并合并的操作放到目前目錄下command.sh的檔案裡的操作

command.sh的内容:

#! /bin/sh
ls -l $1
cat $1
           

第一行是sh檔案開頭必須寫的,用來告訴系統需要什麼程式執行

$1代表第一行

2.xargs

作用: 在使用 find指令的-exec選項處理比對到的檔案時, find指令将所有比對到的檔案一起傳遞給exec執行。但有些系統對能夠傳遞給exec的指令長度有限制,這樣在find指令運作幾分鐘之後,就會出現溢出錯誤。錯誤資訊通常是“參數列太長”或“參數列溢出”。這就是xargs指令的用處所在,特别是與find指令一起使用。

格式:

parameter function
n 一行最多列印幾個字
d 尋找分割符,相當于java String 類裡的split()

使用例子:

1.将a.tx裡的好幾行内容變成一行

檔案a.txt裡的内容:

1 2 3

4 5 6 7

8 9

結果:

Linux指令(三)find,xargs1.find2.xargs

2.将一行變成n行

Linux指令(三)find,xargs1.find2.xargs

3.用i分割開字元串并按每行最多3個列印

Linux指令(三)find,xargs1.find2.xargs

4.查找系統中的每一個普通檔案,然後使用xargs指令來測試它們分别屬于哪類檔案

5.在目前目錄下查找所有使用者具有讀、寫和執行權限的檔案,并收回相應的寫權限

find . -perm -7 -print | xargs chmod o-w
           

使用-i參數預設的前面輸出用{}代替,-I參數可以指定其他代替字元,如例子中的[]

6.用grep指令在所有的普通檔案中搜尋hostname這個詞

\是表示轉義,用來取消find指令中的*在shell中的特殊含義

7.使用xargs執行mv

find . -name "*.log" | xargs -i mv {} test4
           

使用-i參數預設的前面輸出用{}代替,-I參數可以指定其他代替字元,如下面例子中的[]

繼續閱讀