'find' and 'locate' in linux to look up files
来源:互联网 发布:小怪兽 知乎 编辑:程序博客网 时间:2024/06/08 04:21
study notes:
find
locate
1.find
点击打开链接
find by name,
To find a file by name, type:
find -name ""
To find a file by name, but ignore the case of the query, type:
find -iname ""
find -not -name "query_to_avoid"find \! -name "query_to_avoid"
find by type:
find -type type_descriptor query
Some of the most common descriptors that you can use to specify the type of file are here:
f: regular file
d: directory
l: symbolic link
c: character devices
b: block devices
find / -type c
We can search for all files that end in ".conf" like this:
find / -type f -name "*.conf"
Filtering by Time and Size
Size
You can filter by size with the use of the "-size" parameter.
We add a suffix on the end of our value that specifies how we are counting. These are some popular options:
c: bytes
k: Kilobytes
M: Megabytes
G: Gigabytes
b: 512-byte blocks
To find all files that are exactly 50 bytes, type:
find / -size 50c
To find all files less than 50 bytes, we can use this form instead:
find / -size -50c
To Find all files more than 700 Megabytes, we can use this command:
find / -size +700M
Time
Linux stores time data about access times, modification times, and change times.
Access Time: Last time a file was read or written to.
Modification Time: Last time the contents of the file were modified.
Change Time: Last time the file's inode meta-data was changed.
We can use these with the "-atime", "-mtime", and "-ctime" parameters. These can use the plus and minus symbols to specify greater than or less than, like we did with size.
The value of this parameter specifies how many days ago you'd like to search.
To find files that have a modification time of a day ago, type:
find / -mtime 1
If we want files that were accessed in less than a day ago, we can type:
find / -atime -1
To get files that last had their meta information changed more than 3 days ago, type:
find / -ctime +3
There are also some companion parameters we can use to specify minutes instead of days:
find / -mmin -1
This will give the files that have been modified type the system in the last minute.
Find can also do comparisons against a reference file and return those that are newer:
find / -newer myfile
Finding by Owner and Permissions
You can also search for files by the file owner or group owner.
You do this by using the "-user" and "-group" parameters respectively. Find a file that is owned by the "syslog" user by entering:
find / -user syslog
Similarly, we can specify files owned by the "shadow" group by typing:
find / -group shadow
We can also search for files with specific permissions.
If we want to match an exact set of permissions, we use this form:
find / -perm 644
This will match files with exactly the permissions specified.
If we want to specify anything with at least those permissions, you can use this form:
find / -perm -644
This will match any files that have additional permissions. A file with permissions of "744" would be matched in this instance.
Filtering by Depth
For this section, we will create a directory structure in a temporary directory. It will contain three levels of directories, with ten directories at the first level. Each directory (including the temp directory) will contain ten files and ten subdirectories.
Make this structure by issuing the following commands:
cdmkdir -p ~/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}touch ~/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}cd ~/test
Feel free to check out the directory structures with ls
and cd
to get a handle on how things are organized. When you are finished, return to the test directory:
cd ~/test
We will work on how to return specific files from this structure. Let's try an example with just a regular name search first, for comparison:
find -name file1
./level1dir7/level2dir8/level3dir9/file1./level1dir7/level2dir8/level3dir3/file1./level1dir7/level2dir8/level3dir4/file1./level1dir7/level2dir8/level3dir1/file1./level1dir7/level2dir8/level3dir8/file1./level1dir7/level2dir8/level3dir7/file1./level1dir7/level2dir8/level3dir2/file1./level1dir7/level2dir8/level3dir6/file1./level1dir7/level2dir8/level3dir5/file1./level1dir7/level2dir8/file1. . .
There are a lot of results. If we pipe the output into a counter, we can see that there are 1111 total results:
find -name file1 | wc -l
1111
This is probably too many results to be useful to you in most circumstances. Let's try to narrow it down.
You can specify the maximum depth of the search under the top-level search directory:
find -maxdepth num -name query
To find "file1" only in the "level1" directories and above, you can specify a max depth of 2 (1 for the top-level directory, and 1 for the level1 directories):
find -maxdepth 2 -name file1
./level1dir7/file1./level1dir1/file1./level1dir3/file1./level1dir8/file1./level1dir6/file1./file1./level1dir2/file1./level1dir9/file1./level1dir4/file1./level1dir5/file1./level1dir10/file1
That is a much more manageable list.
ou can also specify a minimum directory if you know that all of the files exist past a certain point under the current directory:find -mindepth num -name query
We can use this to find only the files at the end of the directory branches:
find -mindepth 4 -name file
You can combine the min and max depth parameters to focus in on a narrow range:
find -mindepth 2 -maxdepth 3 -name file
./level1dir7/level2dir8/file1./level1dir7/level2dir5/file1./level1dir7/level2dir7/file1./level1dir7/level2dir2/file1./level1dir7/level2dir10/file1./level1dir7/level2dir6/file1./level1dir7/level2dir3/file1./level1dir7/level2dir4/file1./level1dir7/file1. . .
Executing and Combining Find Commands
You can execute an arbitrary helper command on everything that find matches by using the "-exec" parameter. This is called like this:
find find_parameters -exec command_and_params {} \;
The "{}" is used as a placeholder for the files that find matches. The "\;" is used so that find knows where the command ends.
For instance, we could find the files in the previous section that had "644" permissions and modify them to have "664" permissions:
cd ~/testfind . -type f -perm 644 -exec chmod 664 {} \;
We could then change the directory permissions like this:
find . -type d -perm 755 -exec chmod 700 {} \;
If you want to chain different results together, you can use the "-and" or "-or" commands. The "-and" is assumed if omitted.
find . -name file1 -or -name file9
Locate
Find Files Using Locate
An alternative to using find
is the locate
command. This command is often quicker and can search the entire file system with ease.
You can install the command with apt-get:
sudo apt-get updatesudo apt-get install mlocate
The reason locate is faster than find is because it relies on a database of the files on the filesystem.
The database is usually updated once a day with a cron script, but you can update it manually by typing:
sudo updatedb
Run this command now. Remember, the database must always be up-to-date if you want to find recently acquired or created files.
To find files with locate, simply use this syntax:
locate query
You can filter the output in some ways.
For instance, to only return files containing the query itself, instead of returning every file that has the query in the directories leading to it, you can use the "-b" for only searching the "basename":
locate -b query
To have locate only return results that still exist in the filesystem (that were not remove between the last "updatedb" call and the current "locate" call), use the "-e" flag:
locate -e query
To see statistics about the information that locate has cataloged, use the "-S" option:
locate -S
Database /var/lib/mlocate/mlocate.db: 3,315 directories 37,228 files 1,504,439 bytes in file names 594,851 bytes used to store database
Conclusion
Both find and locate are good ways to find files on your system. It is up to you to decide which of these tools is appropriate in each situation.
Find and locate are powerful commands that can be strengthened by combining them with other utilities through pipelines. Experiment with filtering by using commands likewc
,sort
, andgrep
.
- 'find' and 'locate' in linux to look up files
- linux locate and find
- 终于发现vs2005 find in files 提示 No files were found to look in 的问题了
- No files were found to look in.
- Unable to locate tools.jar. Expected to find it in C:/Program Files/Java/jre
- Unable to locate tools.jar. Expected to find it in C:/Program Files/Java/jre
- Unable to locate tools.jar. Expected to find it in C:/Program Files/Java/jre
- Unable to locate tools.jar. Expected to find it in C:/Program Files/Java/jre
- Ant- Unable to locate tools.jar. Expected to find it in C:/Program Files/Java/jre
- Unable to locate tools.jar. Expected to find it in C:/Program Files/Java/jre
- look the files size in linux system
- How to quickly look up a word in dictionary
- Linux - Find string in files.
- linux find string in files
- Unable to locate tools.jar. Expected to find it in........
- How to find and fix faults in Linux applications.
- cpio - archiver to copy and back up files
- Notes: Linux的which, whereis and locate (file and find)
- linux select 多路复用机制
- 代码干货 | Python高性能计算库——Numba
- 编程范式16 笔记 信号量
- MySQL安装图解设置详细教程
- wpf命令详解
- 'find' and 'locate' in linux to look up files
- SQL中的case when then else end用法
- 总结
- Maven命令及生命周期
- [MYSQL -20]更新和删除数据
- 全局变量、static全局变量、全局常量使用方法
- linux之top
- caffe blob类用法详解
- maven常见问题总结