標籤:linux shell 基礎 shell find
文章來自於我的個人部落格:(linux shell)第二章--命令之樂(一)
上一章我們描述了一些linux shell中需要注意的一些文法,接下來我們開始瞭解linux shell的常用命令。let‘s go...
cat 命令:
cat本身表示拼接(concatenate)。cat命令有一些常用參數,像-n,-s等,我們下面逐一介紹:
如果你想快速查看一個文字檔內容,就可以使用cat命令:
cat file
如果你想一次查看多個檔案內容,也是在後面加上檔案路徑即可
cat file1 file2 file3
如果想顯示文字檔的行號,則使用參數-n:
cat -n file 或者 cat -n file1 file2 file3
如果想去掉文本中的空行,則使用參數 -s:
cat -s file 或者 cat -s file1 file2 file3 當然這裡也可以使用tr命令來益處空白行:cat file | tr -s ‘‘; 這個tr命令的意思是說將多個分行符號當作一個分行符號來看待。
find 命令:
find命令是沿著檔案階層向下遍曆,匹配合格檔案,並執行相應的操作。
基本文法:
find . -print #列印出帶有路徑的目前的目錄下的所有檔案路徑
find命令也有很多參數,我們下面來看一些常用參數的用法:
1).根據檔案名稱或者Regex匹配搜尋
find . -name "*.sh" -print #從目前的目錄尋找所有符合以sh結尾的檔案,並列印到終端
-name還有一個對應的-iname來忽略關鍵字的大小寫
find . -iname "*.sh" -print
2).根據路徑匹配
find . -path "*test*" -print #從目前的目錄開始,尋找路徑首碼是test的所有路徑以及列印出這些目錄下的檔案
3).基於Regex的匹配 -regex
find . -regex ".*\.py$" -print
4).否定參數 !
如果想要尋找不包含條件的檔案,則在類型前面加上!即可:
find . ! -name "*.sh" -print
5).給予目錄深度的搜尋 -maxdepth 和-mindepth
我們可以通過這個命令來限制find向下尋找的深度
find . -maxdepth 1 -type f -print #在目前的目錄的目前的目錄尋找是檔案類型的檔案,也就是尋找時它不會向下遍曆
-maxdepth和-mindepth應該作為find的第三個參數出現,如果作為第四個或者之後的參數出現,就可能會影響到find的效率,因為 它不得不進行一些不必要的檢查。
? ?6).根據檔案類型搜尋 -type
? ? ?find . -type d -print #只列出所有的目錄
? ? ?
? ? ?find . -type f -print #只列出所有的檔案
? ? ?find . -type l -print #只列出所有的連結
? ?7).根據檔案的時間搜尋 -mtime(修改時間) -atime(訪問時間) -ctime(變化時間),時間用+,-來表示時間的前後
? ? ?find . -type f -atime -7 -print #列印出在最近7天內被訪問的所有檔案
? ? ?
? ? -amin(訪問時間),-mmin(修改時間),-cmin(變化時間)
? ? ?find . -type f -amin +7 -print #列印出訪問時間超過7分鐘的所有檔案
? ? ?find . -type f -newer file.sh -print #找出比file.sh修改時間更長的所有檔案
? ?8),基於檔案大小的搜尋 -size
? ? ?find . -type f -size +2k #尋找大於2KB的所有檔案,除了k之外,還可以使用b--塊,c--位元組,w--字,M--MB,G--吉位元組
? ? ?
? ? ?find . -type f -size 2k #大於等於2KB的檔案
? ? ?find . -type f -size -2k #小於2KB的檔案
? ?9).匹配操作
? ? ?find . -name "*.sh" -delete #刪除匹配的所有檔案(甚用)
? 10).基於檔案許可權和所有權的匹配 --perm
? ? ?find . -type f -perm 644 -print #列印出許可權為644的檔案
? 11).結合find執行命令或動作
? ? ?find命令可以藉助選項-exec與其他命令進行結合,-exec算得上是find最強大的特性之一。
? ? ?find . -type f -user root -exec chown test {} \; 這個命令中,{}是一個特殊字元串,與-exec選項結合使用。對於每個匹配的檔案,{}會被替換成相應的檔案名稱。在上面的命令中,先尋找檔案所屬是root使用者的所有檔案,然後給test使用者添加許可權。
? ? ?find . -type f -name "*.sh" -exec cat {} \; > all_sh_files.txt 這個命令是先查出所有的sh檔案,然後將檔案的內容都加到文字檔中。?