在最近的一篇文章中,Lewis Cowles 介紹了 find
命令。
find
是日常工具箱中功能更強大、更靈活的命令列工具之一,因此值得花費更多的時間。
最簡單的,find
跟上路徑尋找一些東西。例如:
1 2 |
find / |
它將找到(並列印出)系統中的每個檔案。而且由於一切都是檔案,你會得到很多需要整理的輸出。這可能不能幫助你找到你要找的東西。你可以改變路徑引數來縮小範圍,但它不會比使用 ls
命令更有幫助。所以你需要考慮你想要找的東西。
也許你想在主目錄中找到所有的 JPEG 檔案。 -name
引數允許你將結果限制為與給定模式匹配的檔案。
1 2 |
find ~ -name '*jpg' |
可是等等!如果它們中的一些是大寫的副檔名會怎麼樣?-iname
就像 -name
,但是不區分大小寫。
1 2 |
find ~ -iname '*jpg' |
很好!但是 8.3 名稱方案是如此的老。一些圖片可能是 .jpeg 副檔名。幸運的是,我們可以將模式用“或”(表示為 -o
)來組合。
1 2 |
find ~ ( -iname 'jpeg' -o -iname 'jpg' ) |
我們正在接近目標。但是如果你有一些以 jpg 結尾的目錄呢? (為什麼你要命名一個 bucketofjpg
而不是 pictures
的目錄就超出了本文的範圍。)我們使用 -type
引數修改我們的命令來查詢檔案。
1 2 |
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f |
或者,也許你想找到那些命名奇怪的目錄,以便稍後重新命名它們:
1 2 |
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type d |
你最近拍了很多照片,所以讓我們把它縮小到上週更改的檔案。
1 2 |
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7 |
你可以根據檔案狀態更改時間 (ctime
)、修改時間 (mtime
) 或訪問時間 (atime
) 來執行時間過濾。 這些是在幾天內,所以如果你想要更細粒度的控制,你可以表示為在幾分鐘內(分別是 cmin
、mmin
和 amin
)。 除非你確切地知道你想要的時間,否則你可能會在 +
(大於)或 -
(小於)的後面加上數字。
但也許你不關心你的照片。也許你的磁碟空間不夠用,所以你想在 log
目錄下找到所有巨大的(讓我們定義為“大於 1GB”)檔案:
1 2 |
find /var/log -size +1G |
或者,也許你想在 /data
中找到 bcotton 擁有的所有檔案:
1 2 |
find /data -owner bcotton |
你還可以根據許可權查詢檔案。也許你想在你的主目錄中找到對所有人可讀的檔案,以確保你不會過度分享。
1 2 |
find ~ -perm -o=r |
這篇文章只說了 find
能做什麼的表面。將測試條件與布林邏輯相結合可以為你提供難以置信的靈活性,以便準確找到要查詢的檔案。並且像 -exec
或 -delete
這樣的引數,你可以讓 find
對它發現的內容採取行動。你有任何最喜歡的 find
表示式麼?在評論中分享它們!