命令行快速技巧:如何定位一個文件
我們都會有文件存儲在電腦里 —— 目錄、相片、源代碼等等。它們是如此之多。也無疑超出了我的記憶範圍。要是毫無目標,找到正確的那一個可能會很費時間。在這篇文章里我們來看一下如何在命令行里找到需要的文件,特別是快速找到你想要的那一個。
好消息是 Linux 命令行專門設計了很多非常有用的命令行工具在你的電腦上查找文件。下面我們看一下它們其中三個:ls
、tree
和 find
。
ls
如果你知道文件在哪裡,你只需要列出它們或者查看有關它們的信息,ls
就是為此而生的。
只需運行 ls
就可以列出當下目錄中所有可見的文件和目錄:
$ ls
Documents Music Pictures Videos notes.txt
添加 -l
選項可以查看文件的相關信息。同時再加上 -h
選項,就可以用一種人們易讀的格式查看文件的大小:
$ ls -lh
total 60K
drwxr-xr-x 2 adam adam 4.0K Nov 2 13:07 Documents
drwxr-xr-x 2 adam adam 4.0K Nov 2 13:07 Music
drwxr-xr-x 2 adam adam 4.0K Nov 2 13:13 Pictures
drwxr-xr-x 2 adam adam 4.0K Nov 2 13:07 Videos
-rw-r--r-- 1 adam adam 43K Nov 2 13:12 notes.txt
ls
也可以搜索一個指定位置:
$ ls Pictures/
trees.png wallpaper.png
或者一個指定文件 —— 即便只跟著名字的一部分:
$ ls *.txt
notes.txt
少了點什麼?想要查看一個隱藏文件?沒問題,使用 -a
選項:
$ ls -a
. .bash_logout .bashrc Documents Pictures notes.txt
.. .bash_profile .vimrc Music Videos
ls
還有很多其他有用的選項,你可以把它們組合在一起獲得你想要的效果。可以使用以下命令了解更多:
$ man ls
tree
如果你想查看你的文件的樹狀結構,tree
是一個不錯的選擇。可能你的系統上沒有默認安裝它,你可以使用包管理 DNF 手動安裝:
$ sudo dnf install tree
如果不帶任何選項或者參數地運行 tree
,將會以當前目錄開始,顯示出包含其下所有目錄和文件的一個樹狀圖。提醒一下,這個輸出可能會非常大,因為它包含了這個目錄下的所有目錄和文件:
$ tree
.
|-- Documents
| |-- notes.txt
| |-- secret
| | `-- christmas-presents.txt
| `-- work
| |-- project-abc
| | |-- README.md
| | |-- do-things.sh
| | `-- project-notes.txt
| `-- status-reports.txt
|-- Music
|-- Pictures
| |-- trees.png
| `-- wallpaper.png
|-- Videos
`-- notes.txt
如果列出的太多了,使用 -L
選項,並在其後加上你想查看的層級數,可以限制列出文件的層級:
$ tree -L 2
.
|-- Documents
| |-- notes.txt
| |-- secret
| `-- work
|-- Music
|-- Pictures
| |-- trees.png
| `-- wallpaper.png
|-- Videos
`-- notes.txt
你也可以顯示一個指定目錄的樹狀圖:
$ tree Documents/work/
Documents/work/
|-- project-abc
| |-- README.md
| |-- do-things.sh
| `-- project-notes.txt
`-- status-reports.txt
如果使用 tree
列出的是一個很大的樹狀圖,你可以把它跟 less
組合使用:
$ tree | less
再一次,tree
有很多其他的選項可以使用,你可以把他們組合在一起發揮更強大的作用。man 手冊頁有所有這些選項:
$ man tree
find
那麼如果不知道文件在哪裡呢?就讓我們來找到它們吧!
要是你的系統中沒有 find
,你可以使用 DNF 安裝它:
$ sudo dnf install findutils
運行 find
時如果沒有添加任何選項或者參數,它將會遞歸列出當前目錄下的所有文件和目錄。
$ find
.
./Documents
./Documents/secret
./Documents/secret/christmas-presents.txt
./Documents/notes.txt
./Documents/work
./Documents/work/status-reports.txt
./Documents/work/project-abc
./Documents/work/project-abc/README.md
./Documents/work/project-abc/do-things.sh
./Documents/work/project-abc/project-notes.txt
./.bash_logout
./.bashrc
./Videos
./.bash_profile
./.vimrc
./Pictures
./Pictures/trees.png
./Pictures/wallpaper.png
./notes.txt
./Music
但是 find
真正強大的是你可以使用文件名進行搜索:
$ find -name do-things.sh
./Documents/work/project-abc/do-things.sh
或者僅僅是名字的一部分 —— 像是文件後綴。我們來找一下所有的 .txt 文件:
$ find -name "*.txt"
./Documents/secret/christmas-presents.txt
./Documents/notes.txt
./Documents/work/status-reports.txt
./Documents/work/project-abc/project-notes.txt
./notes.txt
你也可以根據大小尋找文件。如果你的空間不足的時候,這種方法也許特別有用。現在來列出所有大於 1 MB 的文件:
$ find -size +1M
./Pictures/trees.png
./Pictures/wallpaper.png
當然也可以搜索一個具體的目錄。假如我想在我的 Documents 文件夾下找一個文件,而且我知道它的名字里有 「project」 這個詞:
$ find Documents -name "*project*"
Documents/work/project-abc
Documents/work/project-abc/project-notes.txt
除了文件它還顯示目錄。你可以限制僅搜索查詢文件:
$ find Documents -name "*project*" -type f
Documents/work/project-abc/project-notes.txt
最後再一次,find
還有很多供你使用的選項,要是你想使用它們,man 手冊頁絕對可以幫到你:
$ man find
via: https://fedoramagazine.org/commandline-quick-tips-locate-file/
作者:Adam Šamalík 選題:lujun9972 譯者:dianbanjiu 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive