| 知乎专栏 |
{/System,}/Library/Fonts
匹配 /System/Library/Fonts 和 /Library/Fonts 两个目录
find {/System,}/Library/Fonts -name \*ttf
Find every file under directory /usr ending in "stat".
$ find /usr -name *stat /usr/src/linux-headers-2.6.24-22-generic/include/config/cpu/freq/stat /usr/bin/lnstat /usr/bin/sar.sysstat /usr/bin/mpstat /usr/bin/rtstat /usr/bin/nstat /usr/bin/lpstat /usr/bin/ctstat /usr/bin/stat /usr/bin/kpsestat /usr/bin/pidstat /usr/bin/iostat /usr/bin/vmstat /usr/lib/sysstat /usr/share/doc/sysstat /usr/share/gnome/help/battstat /usr/share/omf/battstat /usr/share/zsh/help/stat /usr/share/zsh/4.3.4/functions/Completion/Unix/_diffstat /usr/share/zsh/4.3.4/functions/Completion/Zsh/_stat /usr/share/zsh/4.3.4/functions/Zftp/zfstat
find \( -iname '*.jpg' -o -iname '*.png' -o -iname '*.gif' \) find /www/images -type f \( -iname '*.js' -o -iname '*.css' -o -iname '*.html' \) | xargs tar -czf ~/images.tgz
使用通配符
find . -name "*.jsp" -delete find . -name "*.xml" -delete
find . -regex ".*\.\(jpg\|png\)"
下面regex与name作用相同
find . -regex ".*\.\(txt\|sh\)" find . -name "*.sh" -o -name "*.txt"
-regex参数,使用正则表达式来匹配. 查找当前目录以及子目录中以 ".sh",并改为以".shell"结尾.
[neo@netkiller test]# tree a
a
├── a.py
├── a.sh
└── b
├── b.py
├── b.sh
├── c
│ └── c.sh
└── d
└── d.sh
[neo@netkiller test]# find ./a -type f -regex ".*\.sh$" | sed -r -n 's#(.*\.)sh$#mv & \1shell#e'
[neo@netkiller test]# tree a
a
├── a.py
├── a.shell
└── b
├── b.py
├── b.shell
├── c
│ └── c.shell
└── d
└── d.shell
// 注意 sed s->e 使用方式,官方文档是这样解释的.
This command allows one to pipe input from a shell command into pattern space. If a substitution was made, the command that is found in pattern space is executed and pattern space is replaced with its output. A trailing newline is suppressed; results are undefined if the command to be executed contains a NUL character. This is a GNU sed extension.
Find every file under /home and /var/www owned by the user neo.
$ find /home -user neo $ find /var/www -user neo $ find . -user nobody -iname '*.php'
find ./ -perm -7 -print | xargs chmod o-w find . -perm -o=w
查找当前目录下权限为777的文件并显示到标准输出
find ./ -type f -perm 777 -print
# find /var/spool/clientmqueue/ -type f -delete
保留最近7天的问题,其他全部删除
find . -type f -mtime +7 -delete
find . -type f -name "*.xhtml" -delete
替换文本
# find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
find -exec ls -l {} \; | grep '2011-01-18'
查找*.html文件中aaa替换为bbb
find . -name "*.html" -type f -exec sed -i "s/aaa/bbb/" {} \;
查找文件中含有openWindow字符串的文件
# find -type f -name "*.js" -exec grep -H -A2 openWindow {} \;
./javascript/commonjs.js:function openWindow(url){
./javascript/commonjs.js- window.open(url + "?rand=" + getRandom(), 'gamebinary');
./javascript/commonjs.js-}
find -type f -regex ".*\.\(css\|js\)" -exec yuicompressor {} -o {} \;
find -type f -name "*.js" -exec yuicompressor --type js {} -o {} \;
find -type f -name "*.css" -exec yuicompressor --type css {} -o {} \;
find /usr/local -path "/usr/local/share" -prune -o -print find /usr/local \( -path /usr/local/bin -o -path /usr/local/sbin \) -prune -o -print find /usr/local \(-path /usr/local/dir1 -o -path /usr/local/file1 \) -prune -o -name "temp" -print
查找当前目录下的php文件,排除子目录templates_c, caches
find . \( -path ./templates_c -o -path ./caches \) -prune -o -name "*.php" -print
# find . -mmin +5 -mmin -10
find /www -type f -mtime +60s
查找当前目录下超过6天且是空文件并删除
find ./ -type d -empty -ctime +6 -exec rm -f {} \;
查找7天前的文件并删除
find /backup/svn/day -type f -ctime +7 -exec rm -f {} \;
find /backup/svn/day -type f -ctime +7 -delete
find /backup/svn/day -type f -ctime +7 | xargs rm -f
查询最近3天前内修改的文件
find . -type f -mtime -3
3天前
find . -type f -mtime +3
例 21.1. backup(find + tar)
find / -type f -mtime -7 | xargs tar -rf weekly_incremental.tar gzip weekly_incremental.tar
保留7天,删除7天的日志文件
COPIES=7 find /var/log -type f -mtime +$COPIES -delete
tar --newer="2011-07-04" -zcvf backup.tar.gz /var/www/ tar cvzf foo.tgz /bak -N "2004-03-03 16:49:17"
[root@scientific ~]# find / -maxdepth 1 -name '[!.]*' -printf 'Name: %16f Size: %6s\n' Name: / Size: 4096 Name: misc Size: 0 Name: media Size: 4096 Name: home Size: 4096 Name: dev Size: 3840 Name: net Size: 0 Name: proc Size: 0 Name: sbin Size: 12288 Name: root Size: 4096 Name: lib Size: 4096 Name: cgroup Size: 4096 Name: srv Size: 4096 Name: mnt Size: 4096 Name: etc Size: 12288 Name: usr Size: 4096 Name: lib64 Size: 12288 Name: boot Size: 1024 Name: var Size: 4096 Name: selinux Size: 0 Name: opt Size: 4096 Name: tmp Size: 4096 Name: lost+found Size: 16384 Name: sys Size: 0 Name: bin Size: 4096 # find /etc/ -type f -printf "%CY-%Cm-%Cd %Cr %8s %f\n"
搜索当前目录下除了keys目录下所以子目录中的文件
find ./ -path "./keys" -prune -o -type f -print
find排除多个目录
find ./ \( -path ./conf -o -path ./logs \) -prune -o -print find /data/ \( -path /data/data_backup -o -path /data/mysql \) -prune -o -name "core.*" -type f /data/mysql /data/data_backup
ps 要么都是绝对路径 要么都是相对路径 /data/ 必须有"/" path 后面的路径必须没有"/"
包含 */target/* 目录
[gitlab-runner@localhost cloud.netkiller.cn]$ find . -type f -name "*.jar" -path "*/target/*"
排除 lib 目录
[gitlab-runner@localhost cloud.netkiller.cn]$ find . -type f -name "*.jar" ! -path "lib"
[gitlab-runner@localhost cloud.netkiller.cn]$ find . \( ! -path "*/zito-common/*" -a ! -path "./lib/*" \) -type f -name "*.jar"
neo@MacBook-Pro ~/workspace/Linux % find */images -type d -d 0 -exec echo {} \;
Cryptography/images
Monitoring/images
OpenLDAP/images
Project/images
Web/images
find */images -type d -d 0 -exec rsync -au {}/* $(PUBLIC_HTML)/linux/images \;
find /etc -type f|xargs md5sum
sha1sum
find /etc -type f|xargs sha1sum
find ./ -name "*html" | xargs -n 1 sed -i -e 's/aaa/bbb/g'
find /tmp -name core -type f -print | xargs /bin/rm -f
find . -type f -exec file '{}' \;
find后执行xargs提示xargs: argument line too long解决方法:
find . -type f -name "*.log" -print0 | xargs -0 rm -f
-i 参数可以使用 {}
[gitlab-runner@localhost cloud.sfzito.com]$ find . \( ! -path "*/zito-common/*" -a ! -path "./lib/*" -a ! -path "./dist/*" \) -type f -name "*.jar" | xargs -i cp {} dist/