find 命令
命令格式
1 | find [where to start searching from] [expression determines what to find] [-options] [what to find] |
示例
find 命令: find . -name "?fs*"
解释:
.,表示搜索位置从当前目录搜索,如果你不指定搜索的位置,那么默认从当前目录搜索。-name, 选项指定搜索什么样文件名,后面跟 expression,可以使用元字符。"?fs*", 表示搜索第一个字母任意,第二三个字母为fs,后面字母任意的文件名。
Options
学习一下常用的选项。
-exec CMD: The file being searched which meets the above criteria and returns 0 for as its exit status for successful command execution.-ok CMD: It works same as -exec except the user is prompted first.-size +N/-N[cwbkMG]: Search for files of ‘N’ blocks;- timestamp: search for file of specific timestamp
-atime、-modify、change -type TYPE:The directory TYPE isd,The file TYPE isf-empty: Search for empty files and directories.-newer file: Search for files that were modified/created after ‘file’.
empty,newer
-empty 测试
1 | $ find -empty |
-newer file 测试
1 | find -newer test2.py |
-size
-size +N/-N[cwbkMG] : Search for files of ‘N’
blocks;
Bear in mind that the size is rounded up to the next unit. Therefore -size -1M is not equivalent to -size -1048576c.
+N means size > ‘N’ blocks and -N means
size < 'N' blocks. No + or - means
equal.
Unit:
b: for 512-byte blocks (this is the default if no suffix is used)c: for bytesk: for kibibytes (KiB, units of 1024 bytes)M: for mebibytes (MiB, units of1024 \* 1024 = 1048576 bytes)G: for gibibytes (GiB, units of1024 * 1024 * 1024 = 1073741824 bytes)
1 | find . -size +2G |
timestamp
Linux has 3 time stamps associated to a file:
- Access - the last time the file was read
- Modify - the last time the file was modified (content has been modified)
- Change - the last time meta data of the file was changed
选项: -amin, -atime, -cmin, -ctime, -mmin,-mtime
选项开头为 3 种时间戳的首字母。 -mtime n:查找系统中最近
n*24 被修改的文件 -amin n: 查找系统中最近 n
分钟访问的文件 + 和 - 表示大于小于
1 | find -atime +1 |
-exec 和 -ok
-exec 后面的格式是:
命令+空格+{}+空格+\;
- 花括号
{},代表前面 find 命令查找出来的文件名。 - 以分号 ";" 作为结束标识符的,考虑到各个系统平台对分号的不同解释,我们在分号前再加个反斜杠,便于移植。
使用 find 命令查找相关文件后,再使用 rm 命令将它们删除
1
2find . -size +1G -exec rm -i {} \;
rm: remove regular file './full'? ^C搜索匹配到的文件中的关键内容
1
2find . -name "*.py" -exec grep "lambda" {} \;
pkt = sniff(filter='tcp', prn=lambda pkt:pkt.show())查找文件并移动到指定目录
1
2
3
4
5
6
7
8
9violetv at manjaro in ~/test [11:28:55]
find . -name "*.py" -exec mv {} ../test_tmp \;
violetv at manjaro in ~/test [11:29:13]
ll ../test_tmp
total 32K
-rwxrwxrwx 1 violetv violetv 772 Jul 22 15:07 dfs.py
-rwxrwxrwx 1 violetv violetv 728 Jul 20 21:20 hashable.py
-rwxrwxrwx 1 violetv violetv 520 Jul 22 16:23 reversed_cls.py删除 n 天前的文件
find path -type f -mtime +n -exec rm -fi {} \;查看当前目录下文件个数:
find ./ | wc -lfind 与 xargs 配合 类似于使用
-exec,但是 xargs 速度更快。
参考资料
- manual of find:
man find- Linux 下 find 与 exec 的联手干大事
- Linux - modify file modify/access/change time