linux文件
按名字查找
显示当前文件位置
pwd
在usr下找/bin/postgres
sudo find /usr -wholename '*/bin/postgres'
按文件名查找文件
(1)find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找
(2)find /etc -name httpd.conf #在/etc目录下文件httpd.conf
(3)find /etc -name '*srm*' #使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
(4)find . -name 'srm*' #表示当前目录下查找文件名开头是字符串‘srm’的文件
按大小查找
按大小查询文件
https://blog.csdn.net/qq_39390545/article/details/114936992
find / -type f -size +1G
查看文件详情
得到文件类型
file somefile
显示所有子目录
ls -R
详细信息
ls -LR
正则表达式查找
-regex 模式选项
# find log/ -regex '.*0[34]-\(1.\|.1\)$'
# find log/ -maxdepth 1 -type f -regex '.*0[34]-\(1.\|.1\)$'
-maxdepth 1 -type f:
这两个选项告诉 find 命令仅在log目录下搜索文件。
按时间查询
# awk -F'.' -v from='2022-01-01' -v to='2022-03-29' '$3>=from && $3<=to' <(ls -1 log/*)
2022-01-01和2022-03-29之间的日志文件
<(ls -1 logs) :在这里,使用进程替换来提供awk命令。命令 ls -1 logs/* 的输出成为awk命令的输入
-F '.' -v from='2022-01-01' -v to='2022-03-29':我们使用句点(“ . ”)作为字段分隔符,以便我们可以轻松提取日期字段($3)。此外,我们声明了两个变量来存储给定日期范围的边界
'$3>=from && $3<=to' :这很容易理解——获取时间范围内的日志文件并打印文件名
一天前的文件
下面就是通过.来分割文件日志把值赋给$3变量,在把一天前的值赋给dt,从而dt和$3比较展现文件列表。
# awk -F'.' -v dt="$(date +%F -d '1 days ago')" '$3 <= dt' <(ls -1 log/*)
创建
创建文件夹
创建文件夹
mkdir 文件夹名
创建文件
创建文件
touch 文件名
创建软连接
创建:ln -s 源文件 目标文件
例如:ln -s /bin/hello.sh /usr/local/bin/hello : -s 是代号(symbolic)的意思。
删除:直接 rm dst
例如:rm /usr/local/bin/hello
复制移动
复制
cp [option] 源文件路径 目标文件路径
cp hello.java helloword.java : 将hello.java复制为helloword.java
cp -rf /home/usr /root : 将/home/usr/文件夹复制到/root文件夹下,会形成/root/usr/
cp -rf /home/usr/** /root : 将/home/usr/文件夹下的所有文件复制到/root文件夹下,会形成/root/usr/文件夹下的内容
同步文件
cp -u /test /home
-u 一个文件改了,复制到的那一处跟着修改
-r 若有文件夹,则将文件夹一并复制
-f 若目的盘已有同名文件则先删除再复制
强制覆盖,加反斜杠
\cp test.java test1.java : 相当于先删除test1.java再复制test.java并改名为test1.java
\cp -rf /home/test /home/test1 : 强制/home/test复制到/home/test1下,遇到相同的强制覆盖掉
移动
重命名或移动文件
mv oldname newname
删除
直接删除
删除文件
rm file
删除文件下的所有文件
rm abc/* -f //abc是文件夹名
正则搜索删除
-regex 模式选项
# find log/ -regex '.*0[34]-\(1.\|.1\)$'
# find log/ -maxdepth 1 -type f -regex '.*0[34]-\(1.\|.1\)$'
-maxdepth 1 -type f:
这两个选项告诉 find 命令仅在log目录下搜索文件。
搜索出结果后有以下三种方式删除
# find log/ -regex '.*0[34]-\(1.\|.1\)$' -exec rm "{}" \;
or
# find log/ -regex '.*0[34]-\(1.\|.1\)$' | xargs -I{} rm "{}"
or
# find log/ -regex '.*0[34]-\(1.\|.1\)$' -delete
删除时间范围内的文件
使用awk命令删除
# awk -F'.' -v from='2022-01-01' -v to='2022-03-29' '$3>=from && $3<=to' <(ls -1 log/*)
2022-01-01和2022-03-29之间的日志文件
<(ls -1 logs) :在这里,使用进程替换来提供awk命令。命令 ls -1 logs/* 的输出成为awk命令的输入
-F '.' -v from='2022-01-01' -v to='2022-03-29':我们使用句点(“ . ”)作为字段分隔符,以便我们可以轻松提取日期字段($3)。此外,我们声明了两个变量来存储给定日期范围的边界
'$3>=from && $3<=to' :这很容易理解——获取时间范围内的日志文件并打印文件名
# awk -F'.' -v from='2022-01-01' -v to='2022-03-29' '$3>=from && $3<=to' <(ls -1 log/*) |xargs -I{} rm "{}"
一天前的文件
下面就是通过.来分割文件日志把值赋给$3变量,在把一天前的值赋给dt,从而dt和$3比较展现文件列表。
# awk -F'.' -v dt="$(date +%F -d '1 days ago')" '$3 <= dt' <(ls -1 log/*)
# awk -F'.' -v dt="$(date +%F -d '1 days ago')" -v rm_cmd='rm "%s"\n' '$3 <= dt{printf rm_cmd,$0} ' <(ls -1 log/*) |sh
菜鸟语法:https://www.runoob.com/linux/linux-comm-xargs.html
-a: archive,指复制所有目录
-d: 若源文件是连接文件(link file),则复制的是连接文件而非本身
-f: 强制(force),若有重复或疑问也会直接复制,不会询问用户
-i: 若目标文件已存在,在覆盖前会先询问是否真实操作
-l: 建立硬连接(hard link)的连接文件,而非复制文件本身
-p: 与文件的属性一起复制,而非默认属性
-r: 递归复制,用于目录的复制操作
-s: 复制成符号连接文件(symbolic link),即“快捷方式”文件
-u: 若目标文件比源文件旧,则更新目标文件

浙公网安备 33010602011771号