處理 Linux 檔案的 3 個技巧

2019-10-11 10:11:00

Linux 提供了許多用於查詢、計數和重新命名檔案的命令。這有一些有用的選擇。

Linux 提供了多種用於處理檔案的命令,這些命令可以節省你的時間,並使你的工作不那麼繁瑣。

查詢檔案

當你查詢檔案時,find 可能會是第一個想到的命令,但是有時精心設計的 ls 命令會更好。想知道你昨天離開辦公室回家前呼叫的指令碼麼?簡單!使用 ls 命令並加上 -ltr 選項。最後一個列出的將是最近建立或更新的檔案。

$ 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

像這樣的命令將僅列出今天更新的檔案:

$ 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 提供更好的選項,但它可能會輸出比你想要的更多結果。在下面的命令中,我們搜尋以點開頭的目錄(它們很多一直在更新),指定我們要查詢的是檔案(即不是目錄),並要求僅顯示最近一天 (-mtime -1)更新過的檔案。

$ find . -not -path '*/\.*' -type f -mtime -1 -ls   917517      0 -rwxrw-r--   1 shs      shs          683 Sep 23 11:00 ./newscript

注意 -not 選項反轉了 -path 的行為,因此我們不會搜尋以點開頭的子目錄。

如果只想查詢最大的檔案和目錄,那麼可以使用類似 du 這樣的命令,它會按大小列出當前目錄的內容。將輸出通過管道傳輸到 tail,僅檢視最大的幾個。

$ du -kx | egrep -v "\./.+/" | sort -n | tail -5918984      ./reports1053980     ./notes1217932     ./.cache31470204    ./photos39771212    .

-k 選項讓 du 以塊列出檔案大小,而 x 可防止其遍歷其他檔案系統上的目錄(例如,通過符號連結參照)。事實上,du 會先列出檔案大小,這樣可以按照大小排序(sort -n)。

檔案計數

使用 find 命令可以很容易地計數任何特定目錄中的檔案。你只需要記住,find 會遞回到子目錄中,並將這些子目錄中的檔案與當前目錄中的檔案一起計數。在此命令中,我們計數一個特定使用者(username)的家目錄中的檔案。根據家目錄的許可權,這可能需要使用 sudo。請記住,第一個引數是搜尋的起點。這裡指定的是使用者的家目錄。

$ find ~username -type f 2>/dev/null | wc -l35624

請注意,我們正在將上面 find 命令的錯誤輸出傳送到 /dev/null,以避免搜尋類似 ~username/.cache 這類無法搜尋並且對它的內容也不感興趣的資料夾。

必要時,你可以使用 maxdepth 1 選項將 find 限制在單個目錄中:

$ find /home/shs -maxdepth 1 -type f | wc -l387

重新命名檔案

使用 mv 命令可以很容易地重新命名檔案,但是有時你會想重新命名大量檔案,並且不想花費大量時間。例如,要將你在當前目錄的檔名中找到的所有空格更改為下劃線,你可以使用如下命令:

$ rename 's/ /_/g' *

如你懷疑的那樣,此命令中的 g 表示“全域性”。這意味著該命令會將檔名中的所有空格更改為下劃線,而不僅僅是第一個。

要從文字檔案中刪除 .txt 擴充套件名,可以使用如下命令:

$ rename 's/.txt//g' *

總結

Linux 命令列提供了許多用於處理檔案的有用選擇。請提出你認為特別有用的其他命令。