Find

语法

请不要输入[]

find [路径] [匹配条件] [动作]

使用

查找指定文件名

例:要找 hello.txt

find ./ -name "hello.txt"

如果要不区分英文大小写,可以用 -iname 这个选项

find ./ -iname "hello.txt"

这样不管是 hello.txt 或 Hello.txt 或 HELLO.txt 都可以找得出来,

查找包含关键字的文件或目录

例:查找包含README的文件或目录

find ./ -name "*README*"

例:查找包含README的文件

find ./ -name "*README*" -type f

例:查找包含README的目录

find ./ -name "*README*" -type d

Find 找到特定文件后,并且移动mv这些文件

把当前目录有 “Star” 关键字档名移动到 bar 资料夹

find ./ -name "*Star*" -type f | xargs -i mv {} bar

如果找到的文件名称包含空白需加上 -print0

find ./ -name "*Star*" -type f -print0 | xargs -0 -i mv {} bar

Find 找到特定文件后,并且移动复制cp这些文件

把当前目录有 “Star” 关键字档名复制到 bar 资料夹

find ./ -name "*Star*" -type f | xargs -i cp {} bar

Find 找到特定文件后,并且移动删除rm这些文件

把当前目录有 “Star” 关键字档名给删除

find ./ -name "*Star*" -type f | xargs rm

找到 *.md 文件 并删掉(文件名称有空白或太长要加 -print0 选项)

find /site -name "*.zh-tw.md" -type f -print0 | xargs -0 rm

Find 找到特定文件后,并且搜寻grep这些文件内的文字

把当前目录 tif 档中的 “main” 关键字找出来

find ./ -name "*.tif" -print0 | xargs -0 grep -r "main" --color
find ./ -name "*.tif" -print0 | xargs -0 ag "main"

将两类别关键字的文件 (*.tif 档和 *.h 档) 找出来进行搜寻

find ./ \( -name "*.tif" -o -name "*.h" \) -print0 | xargs -0 grep "stdio"
find ./ \( -name "*.tif" -o -name "*.h" \) -print0 | xargs -0 ag "stdio"

找出执行档类型

find -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary'

根据上例子,找到特定文件后,并且搜寻 grep 这些文件内的文字,假如有搜寻到特定文字的话在作移动mv / 复制cp / 删除rm这些文件,这是进阶中的进阶技巧了! 把当前目录 tif 档内容中包含 “main” 关键字的文件找出来后移动mv文件到 out 资料夹

find ./ -name "*.tif" -print0 | xargs -0 grep -rIl "main" | xargs -i mv {} out

把当前目录 tif 档内容中包含 “main” 关键字的文件找出来后复制cp文件到 out 资料夹

find ./ -name "*.tif" -print0 | xargs -0 grep -rIl "main" | xargs -i cp {} out

把当前目录 tif 档内容中包含 “main” 关键字的文件找出来后删除rm

find ./ -name "*.tif" -print0 | xargs -0 grep -rIl "main" | xargs rm

Find 找到特定文件后,并且取代sed这些文件内的文字

例:把当前目录 tif 文件找出来后用sed将文件内容的 “Star” 取代成 “bar”

find ./ -name "*.tif" -print0 | xargs -0 sed -i 's/Star/bar/g'

Find 根据文件大小来找

找出大于500M的文件

find ./ -size +500M

找出大于2G的文件

find ./ -size +2G

or

find ./ -size +2048M

找出小于160k的jpg照片并且删除

find ./ -name "*.jpg" -size -160k -delete

找出大于160k的jpg照片并且删除

find ./ -name "*.jpg" -size +160k -delete

其他单位使用 c:for bytes k:for Kilobytes (units of 1024 bytes) M:for Megabytes (units of 1048576 bytes) G:for Gigabytes (units of 1073741824 bytes)

Find 根据文件修改日期来找

用 find 指令寻找当前目录下在 5 分钟以内变动过的所有文件

find ./ -type f -mmin -5

用 find 指令寻找当前目录下超过 5 分钟以上变动过的所有文件,同时也是 5 分钟内没有变动过的所有文件

find ./ -type f -mmin +5

用 find 指令寻找当前目录下最后 5 分钟到 10 分钟内变动过的所有文件,

find ./ -type f -mmin +5 -mmin -10

用 find 指令寻找当前目录下 3 天内变动过的所有文件,

find ./ -type f -mtime -3

几个选项的差异 amin:文件的最后存取时间(last access),时间单位为分钟 atime:文件的最后存取时间(last access),时间单位为天 cmin:文件的状态资讯最后修改的时间(last change),时间单位为分钟 ctime:文件的状态资讯最后修改的时间(last change),时间单位为天 mmin:文件的最后修改时间(last modify),时间单位为分钟 mtime:文件的最后修改时间(last modify),时间单位为天

Find排除目录

find 排除单个目录 例:排除单一目录,假如 find txt 文字档时要排除当前 test 目录,指令如下:

find ./ -name "*.txt" -path "./test" -prune -o -print

find 排除多个目录 例:排除当前 test 与 tools 目录,指令如下:

find ./ -name "*.txt" -path "./test" -prune -o -path "./tools" -prune -o -print

排除 2 个以上目录的指令就依此类推

Find 计算找到的文件数量

如果想要计算 find 找到文件结果的数量的话可以配合 wc 这个指令,这边示范找当前目录下副档名为 jpg 的文件数量

find ./ -name "*.jpg" | wc -l