[实践OK]Linux下使用find命令使用-exec 进行两次大括号传入路径进行cat重定向到对应的特定文件,清空日志目录日志。
[实践OK]Linux下使用find命令使用-exec 进行两次大括号传入路径进行cat重定向到对应的特定文件可结合xargs 相关命令:http://jackxiang.com/post/6520/
find超级查找,路径模糊、文件名模糊、时间、大小:
看文件名:https://linux.cn/article-6956-1.html ,使用 -l 选项可以只显示文件名。 ll |grep ^d 只显示目录。
查找所有Conf文件包含了upstream的时间变量的文件列出来:
./nginx.conf
#删除/home/git/gitlab下所有系统日志(每周日11点59分删除一次所有日志)
59 23 * * 0 find /home/git/gitlab/log -name "*.log" -exec bash -c "echo '' > {}" \;
=============================================
这个解决方法我可是找了好久。。。正确写法:
find -name "*" -exec sh -c 'cat {} > {}.out.iso' \;
find -name "*.php" -exec bash -c "mv -f {} {}.tmp" \;
find -name "*.php" -exec bash -c "copy {} {}.tmp" \;
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}.tmp; mv -f {}.tmp {}" \;
替换文件名内容:
find /tmp/exectest -name "*.txt" -exec bash -c "ls {}" \;
/tmp/exectest/b.txt
/tmp/exectest/aaa/ccc.txt
find /tmp/exectest -name "*.txt" -exec bash -c "ls {}|sed -e 's/txt/php/'" \;
/tmp/exectest/b.php
/tmp/exectest/aaa/ddd.php
批量给不同层次的目录包含的*.log里写入jackwriteLog或清空日志:
find -name "*.log" -exec bash -c "echo '' > {}" \;
#删除/home/git/gitlab下所有系统日志(每周日11点59分删除一次所有日志)
59 23 * * 0 find /home/git/gitlab/log -name "*.log" -exec bash -c "echo "" > {}" \;
修改为这样:
#删除/home/git/gitlab下所有系统日志(每周日11点59分删除一次所有日志)
find /home/git/gitlab/log -name "*.log" -exec bash -c "echo "" > {}" \;
# find -name "*.log" -exec bash -c "echo 'jackwriteLog' > {}" \;
# cat ./k.log
jackwriteLog
# cat ./n/n.log
jackwriteLog
# cat ./n/j/a.log
jackwriteLog
find -name "*.php" -exec bash -c "cp {} {}.tmp" \;
a.php a.php.tmp b.php b.php.tmp
@ 2010-08-20 BS一下不看manpage的自己
引用
$ man sed
...
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
...
也就是说,只需要用 sed -i 就可以直接替换文件中的内容
======以前的分割线======
要用sed批量修改文件的内容,但是用这个命令解决不了问题:
find -name "*.php" -exec sed -e 's/aaa/bbb/' {} > {} \;
因为bash把 > 解释为find命令输出的重定向。
修改一下:
find -name "*.php" -exec sed -e 's/aaa/bbb/' {} \> {} \;
还是不行,因为 sed 去寻找一个名为 > 的文件进行处理
再修改:
find -name "*.php" -exec "sed -e 's/aaa/bbb/' {} \> {} " \;
还是不行,因为find去找一个名为 "sed -e 's/aaa/bbb/' {} \> {} " 的程序来执行
那是囧之又囧阿。于是去baidu,去google,
但是无论baidu还是google "find -exec 重定向"
都搜不到相应的解决方案,这样的问题居然没有人遇到过?
于是用google搜了一下
引用
linux find using "-exec" sed redirect
搜到了这一页: http://www.loisch.de/linux.html
看来还是国人太ooxx了,sigh。
解决方案其实很简单:绕个弯,把 -exec 的命令给shell来执行
注意:下面的命令一定不要在有用的文件上直接尝试!!!!!!
引用
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}" \;
哦也!没有错误提示了!
然后 ls -al 一下,爽!所有文件大小都变成 0 了!
为什么捏?那篇文章里面解释了:
因为bash检测到需要重定向到那个文件,所以事先把那个文件清空了。
那篇文章里面提到一个修改bash配置的解决方案,但是不通用,建议还是用他说的第二种方案:
引用
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}.tmp; mv -f {}.tmp {}" \;
嘿,这下爽了!
From:https://www.felix021.com/blog/read.php?1465
像下面这些文章只是说这么用,但从不说为何,在QQ群里说只一句重定向,没一个解释更深入点的,附录:
如何在-exec参数中使用重定向
http://www.2cto.com/os/201306/222794.html
Clear log file content without impacting service that is running (in batch):
find . -name "*.log" -exec bash -c ">{}" \;
Subsitute file content in batch:
find -name "*.xml" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}" \;
http://blog.csdn.net/duanlove/article/details/8261677
find超级查找,路径模糊、文件名模糊、时间、大小:
看文件名:https://linux.cn/article-6956-1.html ,使用 -l 选项可以只显示文件名。 ll |grep ^d 只显示目录。
查找所有Conf文件包含了upstream的时间变量的文件列出来:
./nginx.conf
#删除/home/git/gitlab下所有系统日志(每周日11点59分删除一次所有日志)
59 23 * * 0 find /home/git/gitlab/log -name "*.log" -exec bash -c "echo '' > {}" \;
=============================================
这个解决方法我可是找了好久。。。正确写法:
find -name "*" -exec sh -c 'cat {} > {}.out.iso' \;
find -name "*.php" -exec bash -c "mv -f {} {}.tmp" \;
find -name "*.php" -exec bash -c "copy {} {}.tmp" \;
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}.tmp; mv -f {}.tmp {}" \;
替换文件名内容:
find /tmp/exectest -name "*.txt" -exec bash -c "ls {}" \;
/tmp/exectest/b.txt
/tmp/exectest/aaa/ccc.txt
find /tmp/exectest -name "*.txt" -exec bash -c "ls {}|sed -e 's/txt/php/'" \;
/tmp/exectest/b.php
/tmp/exectest/aaa/ddd.php
批量给不同层次的目录包含的*.log里写入jackwriteLog或清空日志:
find -name "*.log" -exec bash -c "echo '' > {}" \;
#删除/home/git/gitlab下所有系统日志(每周日11点59分删除一次所有日志)
59 23 * * 0 find /home/git/gitlab/log -name "*.log" -exec bash -c "echo "" > {}" \;
修改为这样:
#删除/home/git/gitlab下所有系统日志(每周日11点59分删除一次所有日志)
find /home/git/gitlab/log -name "*.log" -exec bash -c "echo "" > {}" \;
# find -name "*.log" -exec bash -c "echo 'jackwriteLog' > {}" \;
# cat ./k.log
jackwriteLog
# cat ./n/n.log
jackwriteLog
# cat ./n/j/a.log
jackwriteLog
find -name "*.php" -exec bash -c "cp {} {}.tmp" \;
a.php a.php.tmp b.php b.php.tmp
@ 2010-08-20 BS一下不看manpage的自己
引用
$ man sed
...
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
...
也就是说,只需要用 sed -i 就可以直接替换文件中的内容
======以前的分割线======
要用sed批量修改文件的内容,但是用这个命令解决不了问题:
find -name "*.php" -exec sed -e 's/aaa/bbb/' {} > {} \;
因为bash把 > 解释为find命令输出的重定向。
修改一下:
find -name "*.php" -exec sed -e 's/aaa/bbb/' {} \> {} \;
还是不行,因为 sed 去寻找一个名为 > 的文件进行处理
再修改:
find -name "*.php" -exec "sed -e 's/aaa/bbb/' {} \> {} " \;
还是不行,因为find去找一个名为 "sed -e 's/aaa/bbb/' {} \> {} " 的程序来执行
那是囧之又囧阿。于是去baidu,去google,
但是无论baidu还是google "find -exec 重定向"
都搜不到相应的解决方案,这样的问题居然没有人遇到过?
于是用google搜了一下
引用
linux find using "-exec" sed redirect
搜到了这一页: http://www.loisch.de/linux.html
看来还是国人太ooxx了,sigh。
解决方案其实很简单:绕个弯,把 -exec 的命令给shell来执行
注意:下面的命令一定不要在有用的文件上直接尝试!!!!!!
引用
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}" \;
哦也!没有错误提示了!
然后 ls -al 一下,爽!所有文件大小都变成 0 了!
为什么捏?那篇文章里面解释了:
因为bash检测到需要重定向到那个文件,所以事先把那个文件清空了。
那篇文章里面提到一个修改bash配置的解决方案,但是不通用,建议还是用他说的第二种方案:
引用
find -name "*.php" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}.tmp; mv -f {}.tmp {}" \;
嘿,这下爽了!
From:https://www.felix021.com/blog/read.php?1465
像下面这些文章只是说这么用,但从不说为何,在QQ群里说只一句重定向,没一个解释更深入点的,附录:
如何在-exec参数中使用重定向
http://www.2cto.com/os/201306/222794.html
Clear log file content without impacting service that is running (in batch):
find . -name "*.log" -exec bash -c ">{}" \;
Subsitute file content in batch:
find -name "*.xml" -exec bash -c "sed -e 's/aaa/bbb/' {} > {}" \;
http://blog.csdn.net/duanlove/article/details/8261677
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/9275/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2018-1-30 10:16
评论列表