Linux下find与exec结合使用的妙处

128 阅读1分钟

工作中,我们查找某一个文件或者目录名可以用find命令;

查找文件内容是否含某一字符串用可以用grep命令;

但是如果我们想搜索一个目录下 包含某一字符串的文件该怎么办呢?

可以将find和exec结合使用。

搜索README名字的文件: find . -name 'README'

#把文件找出来并复制到tmp目录 ls -l 命令将它们列出来 find . -name "README" -type f -exec ls -l {} ;

image.png 在某个文件中搜索字符串:

grep -n 'Copyright' /home/mysql/mysql_bak/include/my_alloc.h 搜索包含Copyright字符串的文件:

find . -type f -exec grep -l 'Copyright' {} ; 如果需要将字符串替换,使用sed命令:

linux中sed -i 是直接修改文件内容

sed -i 's/Copyright/Copyright-new/g' /home/mysql/mysql_bak/include/my_alloc.h

image.png

但是在unix小型就上sed没有-i的参数,需要替换内容写到临时文件,在mv改名覆盖:

--unix中的替换

sed 's/Copyright/Copyright-new/g' /home/mysql/mysql_bak/include/my_alloc.h >tmp.txt mv tmp.txt >/home/mysql/mysql_bak/include/my_alloc.h 将以上的各个内容结合起来,写脚本批量的找到含有字符串‘Copyright’内容的文件,并替换为‘Copyright-new’:

1.找出包含字符串的文件

find . -name "Copyright" -type f -exec ls -l {} ; > files.txt 2.运行脚本替换

#!/bin/sh for FILE in cat /home/mysql/files.txt do

sed -i 's/Copyright/Copyright-new/g' $FILE

if [ ?eq0]thenecho"? -eq 0 ] then echo "FILE has been changed!" else echo "$FILE change error!" fi done