find 查找
语法模板
- <指定目录>,指定目录及其子目录
- <指定条件>,搜索文件的特征
- -exec + <指定动作>, 对搜索结果进行特定的处理
-maxdepth
, 递归深度:将所有文件名中含有”txt”的文件移入/home/user目录:
find -iname "*txt*" -exec mv -v {} /home/user \;
找出文件名结尾有空格的文件:
find . -type f -exec egrep -l " +$" {} \;
找出文件名有tab缩进符的文件
find . -type f -exec egrep -l $'\t' {} \;
查找guest用户的以avi或者rm结尾的文件并删除掉
find . -name ''*.avi'' -o -name ''*.rm'' -user ''guest'' -exec rm {} \;
- 查找的不以java和xml结尾,并7天没有使用的文件删除掉
find . ! -name *.java ! -name ‘*.xml’ -atime +7 -exec rm {} \;
按文件大小查找
文件大小
find 位置 -type f -size 文件大小(800M)
找出/home/user下所有空子目录:
find /home/user -maxdepth 1 -type d -empty
按时间范围查找
- 将当前目录下最近30天访问过的文件移动到上级back目录
find . -type f -atime -30 -exec mv {} ../back \;
- 将当前目录下最近2小时到8小时之内的文件显示出来
find . -mmin +120 -mmin -480 -exec more {} \;
- 删除修改时间在30天之前的所有文件
find . -type f -mtime +30 -mtime -3600 -exec rm {} \;
查找过去10分钟内的更新的文件
// 如果不加 -type f,则会查找普通文件、特殊文件、目录
find . -type f -mmin -10
newermt 列出当前文件夹下 2019-02-26 11:38 之后的文件
find . -newermt '2019-02-26 11:38'-maxdepth 1
列出当前文件夹下 2019-02-26 11:38 到 2019-02-26 12:00 的文件
find . -newermt '2019-02-26 11:38'! '2019-02-26 12:00' -maxdepth 1
过去五分钟内以 zip 结尾的文件移动到 iBook 目录.
find . -name '*.zip' -mmin -5|xargs -n1 -I {} cp {} ~/iBooks/temp/
grep 查找
grep
-l
, 列出文件中文件名称.r
, 递归列出grep -lr "makeValidLength" ./
// 列出当前文件夹下包含 "makeValidLength" 所有文件名
whereis 查找 binary 文件
专门用于查找可执行文件的命令是 which, 它会查找 $PATH 路径下的可执行文件。
whereis 可以用来查找文件,当然也就包括二进制文件了。
-b : 只找二进制文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件
whereis python/mongod
ps 查找进程
选出 Python 进程并进入 Python shell
a=$(ps aux|grep python|grep -v grep|head -1|awk '{print $11}')
$a
替换
替换文件夹内所有文件的内容
sed 可以编辑文件
对文件夹里的内容进行查找替换 :
grep -lr "makeValidLength" ./|xargs -n1 sed -i 's/makeValidLength/isValidLength/g'
替换单个文件
sed, 流式编辑器,能够过滤和转化文本
sed /s/regexp/replacement/ xxx.file, 匹配 regexp 文本,并使用 replacement 替换,只替换第一个
sed /s/regexp/replacement/g xxx.file, 对 xxx.file 进行全局替换
替换字符串
替换字符串中的空白符
w = `echo someText | sed 's/\s/_/g'`
mv someText w
sed ‘s/\s/_/g’ 是定义的函数,`` 反引号是 echo 打印出的值。
把反斜杠替换成斜杠
s后面的第一个符号被认定为分割符
# 这么写会一直抛异常,原因是 sed 后面的表达式没有闭合
w = `echo 'C:\foo\bar.xml' | sed 's#\\#/'`
# 需要一个分隔符告诉sed 表达式写完了
w = `echo 'C:\foo\bar.xml' | sed 's#\\#/#'`
/g 的作用是全局替换
但是上面写的有一个问题,打印出来是这样的C:/foo\bar.xml
所以这个表达式的结尾还需要加一个/g,表示是全局替换:
又因为之前已经把分隔符指定为 #, 所以添加 #gw = `echo 'C:\foo\bar.xml' | sed 's#\\#/#g#'`