find
是linux
裡面乙個非常常用且非常強大的命令了,學會了find
,你對linux
的哲學——「一切皆檔案」了解會更深入。
順便說下,面試問到linux
,幾乎都會問find
。
按照目錄層級搜尋檔案。find
的工作原理,是按照目錄樹來搜尋檔名。
需要注意的是,find
的引數很多,所以我會彙總各種引數風格放進來。
下面的例子,目錄結構是這樣的
a
|-- b
| |-- c
| | |-- d
| | `-- d
| `-- c
`-- b
a
、b
、c
、d
都是目錄,b
、c
、d
都是檔案
-depth
# 參照
$ find a/
a/a/b
a/b/c
a/b/c/d
a/b/c/d
a/b/c
a/b# 本命令
$ find a/ -depth
a/b/c/d
a/b/c/d
a/b/c
a/b/c
a/ba/b
a/
搜尋檔案時,先處理目錄下的檔案,再處理目錄。可以看到,沒使用這個引數之前,find
會首先處理並列印出目錄,然後再從深到淺列印出檔案。使用後,則會從深到淺處理所有內容。
-maxdepth
-mindepth
# 舉例
$ find a/ -maxdepth 3 -mindepth 2 -depth
a/b/c/d
a/b/c/d
a/b/c
a/b/c
搜尋檔案時,指定最深層級和最淺層級
配合前面的+n: >n
天內被修改過的檔案,可以用-n: 這個引數很有意思,當我們對目標檔案的屬性有特殊要求時,可能會用這個引數配合其他的篩選條件使用。比如,當我們查詢7
find . -ctime -7
-atime: 訪問時間
-ctime: 修改時間-mtime: 修改屬性時間
n
使用,可以按時間篩選檔案
-size
# 例子
$ find . -type f -size +1k
./.bash_history
配合前面的n
使用,可以按大小篩選檔案。而且n
有單位(附錄1),比如例子就是查詢大於1k
的檔案
-type
# 例子
$ find . -type f -size 1c
配合檔案型別使用,我們知道,在linux
中,一切皆檔案,我們用「檔案種類」來區分目錄和普通檔案呢。普通檔案是f
,目錄是d
,檔案種類的列表見附錄2。
例子就是查詢檔案大小恰好是1位元組的普通檔案。
-user
-group
按照使用者和使用者來查詢檔案
-name
# 例子
$ find . -type f -name '12*'
按照檔名來查詢,支援基礎的正則。需要帶上單引號,防止出現多檔案問題。前面說的都只是查詢檔案,find其實也可以針對查詢的結果執行一些命令,這種引數我叫它「可執行引數」(自己起的)
特別注意,務必先驗證一下你的find語句,然後再用可執行引數!
-delete
# 例子
$ find . -type f -size -1c -name 123 -delete
這個引數,就是查詢並刪除檔名是123,檔案大小恰好1位元組的普通檔案
-exec
# 例子
$ find . -type f -name '12*' -exec ls -l {} ;
這個引數可以說是非常有用了!
-exec
後面跟的是command
命令,考慮到不同系統可能對分號有不同的定義,所以以」空格+反斜槓+分號「的形式來作為結束。
{}
則是前面find
得到的結果。
所以看例子,find . -type f -name '12*'
是搜尋名字為12*
的普通檔案,後面-exec ls -l {} ;
拆分成-exec
和ls -l {}
和;
這麼拆分一下,是不是簡單明瞭?
-ok
# 例子
$ find . -type f -name '12*' -exec ls -l {} ;
跟-exec
類似,但是在執行command
前,會讓你確認,所以雖然-exec
考的多用的也多,我還是更推薦-ok
!
-size 的單位
'b' for 512-byte blocks (this is the default if no suffix is used)
'c' for bytes
'w' for two-byte words
'k' for kilobytes (units of 1024 bytes)
'm' for megabytes (units of 1048576 bytes)
'g' for gigabytes (units of 1073741824 bytes)
檔案種類列表
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (fifo)
f regular file
l symbolic link; this is never true if the -l option or the -follow option is in effect, unless the sym-bolic link is broken. if you want to search for symbolic links when -l is in effect, use -xtype.
s socket
d door (solaris)
linux 檔案許可權修改
檢視linux檔案的許可權 ls l 檔名稱 檢視linux資料夾的許可權 ls ld 資料夾名稱 所在目錄 修改檔案及資料夾許可權 sudo chmod 代表型別 所有者 組使用者 其他使用者 常用修改許可權的命令 sudo chmod 600 只有所有者有讀和寫的許可權 sudo chmod 6...
linux修改檔案許可權
使用chmod 777 修改檔案或目錄的讀寫執行許可權 命令 chmod 777 tmp abc.txt rwxrwxrwx.1 root root 156 tmp abc.txt 使用 chown 命令可以修改檔案或目錄所屬的使用者 命令 chown 使用者 目錄或檔名 例如 chown abc ...
Linux修改檔案編碼
如果不同的程式使用不同的編碼來處理同乙個檔案,原始檔中的特殊字元就無法正常顯示。這裡的特殊字元指的是非英文本母的字元,例如帶重音的字元 比如 步驟一 為了確定檔案的字元編碼,我們使用乙個名為 file 的命令列工具。因為 file 命令是乙個標準的 unix 程式,所以我們可以在所有現代的 linu...