在 Linux 下工做,打交道最多的就是文件了,畢竟 Linux 下工做一切皆文件嘛。Linux 也爲你們提供了多種用於處理文件的命令,合理使用這些命令能夠大大節省你的時間,並讓咱們的工做負擔再也不那麼沉重。linux
當咱們查找文件時,第一時間想到的確定是 find 命令。可是若是咱們搜索的路徑範圍比較大時,花費的時間會比較多,在這個狀況下 find 命令就不是最優的方式了。面試
咱們可使用 ls 快速找到近期更新的文件。好比,想知道本身昨天離開辦公室回家前調用的腳本嗎?小case嘛!使用 ls 命令並加上 -ltr
選項。最後一個列出的將是最近建立或更新的文件。spa
$ ls -ltr ~/bin | tail -3
-rwx------ 1 shs shs 229 Sep 22 19:37 checkCPU
-rwx------ 1 shs shs 285 Sep 22 19:37 ff
-rwxrw-r-- 1 shs shs 1629 Sep 22 19:37 test2複製代碼
若是咱們僅僅想列出今天更新的文件,能夠這樣操做:.net
$ ls -al --time-style=+%D | grep `date +%D`
drwxr-xr-x 60 shs shs 69632 09/23/19 .
drwxrwxr-x 2 shs shs 8052736 09/23/19 bin
-rw-rw-r-- 1 shs shs 506 09/23/19 stats複製代碼
若是咱們想要查找的文件可能不在當前目錄中,那麼 find 將比 ls 更加靈活強大。可是,find 命令的輸出結果可能會比較多,咱們可使用它的一些選項來過濾掉本身不想要的結果。命令行
好比,在下面的命令中,咱們不搜索以點開頭的目錄(即隱藏目錄),指定咱們要查找的是文件而不是目錄,並要求僅顯示最近一天更新過的文件。code
命令以下:cdn
$ find . -not -path '*/\.*' -type f -mtime -1 -ls
917517 0 -rwxrw-r-- 1 shs shs 683 Sep 23 11:00 ./newscript複製代碼
注意 -not
選項反轉了 -path 的行爲,所以咱們不會搜索以點開頭的子目錄。blog
若是咱們只想查找最大的文件和目錄,那麼可使用相似 du
這樣的命令,它會按大小列出當前目錄的內容。而後,再將輸出的內容經過管道傳輸到 tail
命令,僅查看最大的幾個。排序
$ du -kx | egrep -v "\./.+/" | sort -n | tail -5
918984 ./reports
1053980 ./notes
1217932 ./.cache
31470204 ./photos
39771212 .複製代碼
-k
選項讓 du 以塊列出文件大小,而 x
可防止其遍歷其餘文件系統上的目錄(例如,經過符號連接引用)。命令運行後,du 命令會先列出文件大小,而後再調用 sort -n
來按照大小排序。遞歸
使用 find 命令能夠很容易地計數任何特定目錄中的文件。不過你們要注意的是,find 會遞歸到子目錄中,並將這些子目錄中的文件與當前目錄中的文件一塊兒計數。
好比,咱們想計數一個特定用戶(alvin)的主目錄中的文件,咱們能夠先用 find 命令找到文件,再用 wc 命令進行統計。
$ find /home/alvin -type f 2>/dev/null | wc -l
35624複製代碼
請注意,咱們將 find 命令的錯誤輸出發送到 /dev/null,爲了不搜索相似 ~/.cache 這類沒法搜索而且對它的內容也不感興趣的文件夾。
必要時,咱們可使用 -maxdepth 1
選項將 find 搜索範圍限制在單個目錄中,或者也能夠將其設置爲本身想要搜索的深度:
$ find /home/alvin -maxdepth 1 -type f | wc -l
387複製代碼
使用 mv
命令能夠很容易地重命名一個文件,可是有時咱們想重命名大量文件,而且不想花費大量時間,要怎麼操做呢?這個時候 rename
命令就要派上用場了。
例如,咱們想要將當前目錄下全部文件的文件名中含有空格的所有更改成下劃線,你們可使用以下命令:
$ rename 's/ /_/g' *複製代碼
你們應該能想到,此命令行中的 g
表明「全局」。這就意味着該命令會將文件名中的全部空格更改成下劃線,而不單單是第一個。
若是咱們想要把文本的文件刪除掉 .txt 擴展名,可使用以下命令:
$ rename 's/.txt//g' *複製代碼