将目录中的文件查找出来并全部拷备文件到指定目录:
find . -type f -exec cp -rf {} /tmp/pdf \;
背景:删除一些vim的临时文件及批量文件修改时间,有用xargs的也有用exec......但是这个命令的后面这一部分得小心点写,有一个空格。
第一:花括号}后面必须得有空格.
第二:最后斜杠后面必须得有分号。
第三:exec前面有一个中横线,否则也不行,三者必须要注意。
如:
#!/bin/bash
Redisdb_file=/data/redis/6403/redis.rdb
Redisbak_dir=/data/bak/redis/6403
Bak_time=`date +%Y%m%d%H%M`
mkdir -p $Redisbak_dir
/bin/cp -rf $Redisdb_file $Redisbak_dir/redis.rdb.$Bak_time
find $Redisbak_dir -name "redis.db.201*" -mtime +30 -exec rm -rf {} \;
+ /bin/cp -rf /data/redis/6403/redis.rdb /data/bak/redis/6403/redis.rdb.201610262250
+ find /data/bak/redis/6403 -name 'redis.db.201*' -mtime +30 -exec rm -rf '{}' ';'
-----------------------------------------------------------------------------------------------------------------------------------
[root@iZ25dcp92ckZ jackxiang.com]# find . -name "*.php" -exec grep "messagebox-bottom" {} \;
<div class="messagebox-bottom">
<div class="messagebox-bottom"><a href="javascript: window.history.back();">{$lnc[263]}</a> | <a href="index.php">{$lnc[88]}</a> {admin_plus}</div>
<div class="messagebox-bottom"><a href="javascript: window.history.back();">{$lnc[263]}</a> | <a href="index.php">{$lnc[88]}</a> {admin_plus}</div>
[root@iZ25dcp92ckZ jackxiang.com]# find . -name "*.php" -exec grep -lr -A3 "您目前的用户组是" {} \;
./lang/zh-cn/common.php
======================这儿不得不说xargs和-exec的区别=================================
1)-exec里的{} 相当于一个变量,于是grep时是每次针对单个文件的,所以没有文件名显示。
2)而xagrs是管道,则grep认为是一堆文件进行grep,于是默认就有文件名。
-exec就像这样指定了文件名,当然没有文件名存在了,在使用时根据实际情况进行使用:
=======================================================================================
下面这两种情况都是没法执行得到的,如下:
[root@localhost test]# find . -ctime -1 -exec ls -l {} \ ;
find: missing argument to `-exec'
[root@localhost test]# find . -ctime -1 -exec ls -l {} \
>
所以,必须得要注意,而用xargs来做这个就不用那么多事了:
find . -mtime +30 | xargs rm -f
每天运行一次,清理半月外的文件,予以删除:
==================================
[root@localhost ~]# find /tmp -type f
/tmp/.X0-lock
/tmp/test.pcap
[root@localhost ~]# find /tmp -type f|xargs echo
/tmp/.X0-lock /tmp/test.pcap
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。
[root@localhost ~]# find /tmp -type f -exec ls -l {} \;
-r--r--r-- 1 root root 11 Aug 21 2014 /tmp/.X0-lock
-rw-r--r-- 1 root root 24 Mar 10 10:42 /tmp/test.pcap
[root@localhost ~]# find /tmp -type f -exec ls -l {} ;
find: missing argument to `-exec'
[root@localhost ~]# find /tmp -type f -exec ls -l {} \;
-r--r--r-- 1 root root 11 Aug 21 2014 /tmp/.X0-lock
-rw-r--r-- 1 root root 24 Mar 10 10:42 /tmp/test.pcap
应用 一:
使用功能:删除当前目录下所有的后缀为'~'的文件
使用场合:VI编辑时经常产生~备份文件,当备份文件时候,特别是生成patch时候,需要将它删掉,否则产生很多垃圾数据,但单个删除太慢,以下为整体删除
find ./ -name \*~ -exec rm -rfv \{\} \;
应用 二:
使用功能:将当前目录所有的文件的时间更新为当前时间
使用场合:在嵌入式开发时运行虚拟机器,当windows的时间提前于虚拟机时,则windiows编辑的文件不能在虚拟下正常编译,提示时间太新,这时需同步时间
find ./ -name \* -exec touch \{\} \;
find -exec 介绍
1. find -exec command {} + 将所用的符合规的文件一起执行一次command 命令
例:
touch 1ww 2ww 3ww 4ww
mkdir 123
touch 123/4ww
touch 123/5ww
find ./ -name \*ww -exec ls -l \{\} +
实际最后执行以下命令:
ls -l 1ww 2ww 3ww 4ww 123/4ww
2. find -exec command {} ; 对符合规则的文件单独执行command命令
find ./ -name \*ww -exec ls -l \{\} \;
实际最后执行以下命令:
ls -l 1ww
ls -l 2ww
ls -l 3ww
ls -l 4ww
ls -l 123/4ww
ls -l 123/5ww
3. find -execdir command {} + '+' ';'同上,只是execdir所运行的文件在其文件的当前目录(可消除竞争)
find ./ -name \*ww -execdir ls -l \{\} +
实际最后执行以下命令
ls -l 1ww 2ww 3ww 4ww
pwd ./123
ls -l 4ww 5ww
4. find ./ -name \*ww -execdir ls -l \{\} \;
ls -l 1ww
ls -l 2ww
ls -l 3ww
ls -l 4ww
pwd ./123
ls -l 4ww
ls -l 5ww
摘自:http://www.cnblogs.com/peida/archive/2012/11/14/2769248.html
find . -type f -exec cp -rf {} /tmp/pdf \;
背景:删除一些vim的临时文件及批量文件修改时间,有用xargs的也有用exec......但是这个命令的后面这一部分得小心点写,有一个空格。
第一:花括号}后面必须得有空格.
第二:最后斜杠后面必须得有分号。
第三:exec前面有一个中横线,否则也不行,三者必须要注意。
如:
#!/bin/bash
Redisdb_file=/data/redis/6403/redis.rdb
Redisbak_dir=/data/bak/redis/6403
Bak_time=`date +%Y%m%d%H%M`
mkdir -p $Redisbak_dir
/bin/cp -rf $Redisdb_file $Redisbak_dir/redis.rdb.$Bak_time
find $Redisbak_dir -name "redis.db.201*" -mtime +30 -exec rm -rf {} \;
+ /bin/cp -rf /data/redis/6403/redis.rdb /data/bak/redis/6403/redis.rdb.201610262250
+ find /data/bak/redis/6403 -name 'redis.db.201*' -mtime +30 -exec rm -rf '{}' ';'
-----------------------------------------------------------------------------------------------------------------------------------
[root@iZ25dcp92ckZ jackxiang.com]# find . -name "*.php" -exec grep "messagebox-bottom" {} \;
<div class="messagebox-bottom">
<div class="messagebox-bottom"><a href="javascript: window.history.back();">{$lnc[263]}</a> | <a href="index.php">{$lnc[88]}</a> {admin_plus}</div>
<div class="messagebox-bottom"><a href="javascript: window.history.back();">{$lnc[263]}</a> | <a href="index.php">{$lnc[88]}</a> {admin_plus}</div>
[root@iZ25dcp92ckZ jackxiang.com]# find . -name "*.php" -exec grep -lr -A3 "您目前的用户组是" {} \;
./lang/zh-cn/common.php
======================这儿不得不说xargs和-exec的区别=================================
1)-exec里的{} 相当于一个变量,于是grep时是每次针对单个文件的,所以没有文件名显示。
2)而xagrs是管道,则grep认为是一堆文件进行grep,于是默认就有文件名。
-exec就像这样指定了文件名,当然没有文件名存在了,在使用时根据实际情况进行使用:
=======================================================================================
下面这两种情况都是没法执行得到的,如下:
[root@localhost test]# find . -ctime -1 -exec ls -l {} \ ;
find: missing argument to `-exec'
[root@localhost test]# find . -ctime -1 -exec ls -l {} \
>
所以,必须得要注意,而用xargs来做这个就不用那么多事了:
find . -mtime +30 | xargs rm -f
每天运行一次,清理半月外的文件,予以删除:
==================================
[root@localhost ~]# find /tmp -type f
/tmp/.X0-lock
/tmp/test.pcap
[root@localhost ~]# find /tmp -type f|xargs echo
/tmp/.X0-lock /tmp/test.pcap
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。
[root@localhost ~]# find /tmp -type f -exec ls -l {} \;
-r--r--r-- 1 root root 11 Aug 21 2014 /tmp/.X0-lock
-rw-r--r-- 1 root root 24 Mar 10 10:42 /tmp/test.pcap
[root@localhost ~]# find /tmp -type f -exec ls -l {} ;
find: missing argument to `-exec'
[root@localhost ~]# find /tmp -type f -exec ls -l {} \;
-r--r--r-- 1 root root 11 Aug 21 2014 /tmp/.X0-lock
-rw-r--r-- 1 root root 24 Mar 10 10:42 /tmp/test.pcap
应用 一:
使用功能:删除当前目录下所有的后缀为'~'的文件
使用场合:VI编辑时经常产生~备份文件,当备份文件时候,特别是生成patch时候,需要将它删掉,否则产生很多垃圾数据,但单个删除太慢,以下为整体删除
find ./ -name \*~ -exec rm -rfv \{\} \;
应用 二:
使用功能:将当前目录所有的文件的时间更新为当前时间
使用场合:在嵌入式开发时运行虚拟机器,当windows的时间提前于虚拟机时,则windiows编辑的文件不能在虚拟下正常编译,提示时间太新,这时需同步时间
find ./ -name \* -exec touch \{\} \;
find -exec 介绍
1. find -exec command {} + 将所用的符合规的文件一起执行一次command 命令
例:
touch 1ww 2ww 3ww 4ww
mkdir 123
touch 123/4ww
touch 123/5ww
find ./ -name \*ww -exec ls -l \{\} +
实际最后执行以下命令:
ls -l 1ww 2ww 3ww 4ww 123/4ww
2. find -exec command {} ; 对符合规则的文件单独执行command命令
find ./ -name \*ww -exec ls -l \{\} \;
实际最后执行以下命令:
ls -l 1ww
ls -l 2ww
ls -l 3ww
ls -l 4ww
ls -l 123/4ww
ls -l 123/5ww
3. find -execdir command {} + '+' ';'同上,只是execdir所运行的文件在其文件的当前目录(可消除竞争)
find ./ -name \*ww -execdir ls -l \{\} +
实际最后执行以下命令
ls -l 1ww 2ww 3ww 4ww
pwd ./123
ls -l 4ww 5ww
4. find ./ -name \*ww -execdir ls -l \{\} \;
ls -l 1ww
ls -l 2ww
ls -l 3ww
ls -l 4ww
pwd ./123
ls -l 4ww
ls -l 5ww
摘自:http://www.cnblogs.com/peida/archive/2012/11/14/2769248.html
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/7859/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2023-1-28 14:39
评论列表