From 2a795e25707549e86d50f80715f4c26d20ef23d1 Mon Sep 17 00:00:00 2001 From: darksun Date: Tue, 6 Nov 2018 09:56:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=89=E9=A2=98:=20Commandline=20quick=20tip?= =?UTF-8?q?s:=20How=20to=20locate=20a=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ndline quick tips- How to locate a file.md | 229 ++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 sources/tech/20181105 Commandline quick tips- How to locate a file.md diff --git a/sources/tech/20181105 Commandline quick tips- How to locate a file.md b/sources/tech/20181105 Commandline quick tips- How to locate a file.md new file mode 100644 index 0000000000..b88248be84 --- /dev/null +++ b/sources/tech/20181105 Commandline quick tips- How to locate a file.md @@ -0,0 +1,229 @@ +Commandline quick tips: How to locate a file +====== + +![](https://fedoramagazine.org/wp-content/uploads/2018/10/commandlinequicktips-816x345.jpg) + +We all have files on our computers — documents, photos, source code, you name it. So many of them. Definitely more than I can remember. And if not challenging, it might be time consuming to find the right one you’re looking for. In this post, we’ll have a look at how to make sense of your files on the command line, and especially how to quickly find the ones you’re looking for. + +Good news is there are few quite useful utilities in the Linux commandline designed specifically to look for files on your computer. We’ll have a look at three of those: ls, tree, and find. + +### ls + +If you know where your files are, and you just need to list them or see information about them, ls is here for you. + +Just running ls lists all visible files and directories in the current directory: + +``` +$ ls +Documents Music Pictures Videos notes.txt +``` + +Adding the **-l** option shows basic information about the files. And together with the **-h** option you’ll see file sizes in a human-readable format: + +``` +$ 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 +``` + +**Is** can also search a specific place: + +``` +$ ls Pictures/ +trees.png wallpaper.png +``` + +Or a specific file — even with just a part of the name: + +``` +$ ls *.txt +notes.txt +``` + +Something missing? Looking for a hidden file? No problem, use the **-a** option: + +``` +$ ls -a +. .bash_logout .bashrc Documents Pictures notes.txt +.. .bash_profile .vimrc Music Videos +``` + +There are many other useful options for **ls** , and you can combine them together to achieve what you need. Learn about them by running: + +``` +$ man ls +``` + +### tree + +If you want to see, well, a tree structure of your files, tree is a good choice. It’s probably not installed by default which you can do yourself using the package manager DNF: + +``` +$ sudo dnf install tree +``` + +Running tree without any options or parameters shows the whole tree starting at the current directory. Just a warning, this output might be huge, because it will include all files and directories: + +``` +$ 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 +``` + +If that’s too much, I can limit the number of levels it goes using the -L option followed by a number specifying the number of levels I want to see: + +``` +$ tree -L 2 +. +|-- Documents +| |-- notes.txt +| |-- secret +| `-- work +|-- Music +|-- Pictures +| |-- trees.png +| `-- wallpaper.png +|-- Videos +`-- notes.txt +``` + +You can also display a tree of a specific path: + +``` +$ tree Documents/work/ +Documents/work/ +|-- project-abc +| |-- README.md +| |-- do-things.sh +| `-- project-notes.txt +`-- status-reports.txt +``` + +To browse and search a huge tree, you can use it together with less: + +``` +$ tree | less +``` + +Again, there are other options you can use with three, and you can combine them together for even more power. The manual page has them all: + +``` +$ man tree +``` + +### find + +And what about files that live somewhere in the unknown? Let’s find them! + +In case you don’t have find on your system, you can install it using DNF: + +``` +$ sudo dnf install findutils +``` + +Running find without any options or parameters recursively lists all files and directories in the current directory. + +``` +$ 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 +``` + +But the true power of find is that you can search by name: + +``` +$ find -name do-things.sh +./Documents/work/project-abc/do-things.sh +``` + +Or just a part of a name — like the file extension. Let’s find all .txt files: + +``` +$ 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 +``` + +You can also look for files by size. That might be especially useful if you’re running out of space. Let’s list all files larger than 1 MB: + +``` +$ find -size +1M +./Pictures/trees.png +./Pictures/wallpaper.png +``` + +Searching a specific directory is also possible. Let’s say I want to find a file in my Documents directory, and I know it has the word “project” in its name: + +``` +$ find Documents -name "*project*" +Documents/work/project-abc +Documents/work/project-abc/project-notes.txt +``` + +Ah! That also showed the directory. One thing I can do is to limit the search query to files only: + +``` +$ find Documents -name "*project*" -type f +Documents/work/project-abc/project-notes.txt +``` + +And again, find have many more options you can use, the man page might definitely help you: + +``` +$ man find +``` + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/commandline-quick-tips-locate-file/ + +作者:[Adam Šamalík][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/asamalik/ +[b]: https://github.com/lujun9972