1、文件通配符模式(wildcard pattern)
文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件
通配符采有特定的符号,表示特定的含义,此特符号称为元 meta 字符
常见的通配符如下:
* 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件 ? 匹配任何单个字符,一个汉字也算一个字符 ~ 当前用户家目录 ~mage 用户mage家目录 . 和 ~+ 当前工作目录 ~- 前一个工作目录 [0-9] 匹配数字范围 [a-z] 一个字母 [A-Z] 一个字母 [wang] 匹配列表中的任何的一个字符 [^wang] 匹配列表中的所有字符以外的字符 [^a-z] 匹配列表中的所有字符以外的字符
别外还有在Linux系统中预定义的字符类:man 7 glob
[:digit:]:任意数字,相当于0-9 [:lower:]:任意小写字母,表示 a-z [:upper:]: 任意大写字母,表示 A-Z [:alpha:]: 任意大小写字母 [:alnum:]:任意数字或字母 [:blank:]:水平空白字符 [:space:]:水平或垂直空白字符 [:punct:]:标点符号 [:print:]:可打印字符 [:cntrl:]:控制(非打印)字符 [:graph:]:图形字符 [:xdigit:]:十六进制字符
例:
[root@centos7 data]# ls b[[:lower:]] ba bb bc
2.如何查看隐藏文件:
[root@centos7 ~]# ls * -d Desktop Documents Downloads Music Pictures Public Templates Videos 你会发现并不会显示隐藏文件,因为*不匹配开头为.的文件
那么我们还有别的方法:
[root@centos7 ~]# ls .[^.]* -d .bash_history .bash_profiley .cache .dbus .ICEauthority .mozilla .bash_profile .bashrc .config .esd_auth .local
这个是只显示隐藏文件不包含.和..
[root@centos7 ~]# ls -d .* . .bash_history .bash_profiley .cache .dbus .ICEauthority .mozilla .. .bash_profile .bashrc .config .esd_auth .local
当然也可以用ls -I(不显示):
[root@centos7 ~]# ls -I '[^.]*' -a . .bash_history .bash_profiley .cache .dbus .ICEauthority .mozilla .. .bash_profile .bashrc
3.关闭防火墙:
[root@centos7 ~]# systemctl stop firewalld
开机不启动:
[root@centos7 ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
4.[]和{}的区别:
[root@centos7 data]# ls f[a-l] fa fb fd fk fl [root@centos7 data]# ls f{a..l} ls: cannot access fc: No such file or directory ls: cannot access fe: No such file or directory ls: cannot access ff: No such file or directory ls: cannot access fg: No such file or directory ls: cannot access fh: No such file or directory ls: cannot access fi: No such file or directory ls: cannot access fj: No such file or directory fa fb fd fk fl
中括号是只要匹配就可以,而花括号一个一个匹配
5.[:lower:]和[[:lower:]]的区别
[root@centos7 data]# ls f[:lower:].txt fe.txt fl.txt fo.txt fr.txt fw.txt [root@centos7 data]# ls f[[:lower:]].txt fa.txt fc.txt fe.txt fg.txt fi.txt fk.txt fm.txt fo.txt fq.txt fs.txt fu.txt fw.txt fy.txt fb.txt fd.txt ff.txt fh.txt fj.txt fl.txt fn.txt fp.txt fr.txt ft.txt fv.txt fx.txt fz.txt
可以发现一个中括号只是匹配括号其中的一个,而两个中括号则是全部。
6.练习
1)显示/var目录下的所有以i开头,以一个小写字母结尾,中间出现至少一位数字的文件或者目录
ls -d /var/i*[[:digit:]]*[[:lower:]]
2)显示/etc目录下任意一位数字开头,且以非数字结尾的文件或目录
ls -d /etc/[0-9]*[^0-9]
3)只显示/etc下的非隐藏文件目录
ls -d /etc/*
7.cp:利用 cp(copy)命令可以实现文件或目录的复制
格式: cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-i 如果目标已存在,覆盖前提示是否覆盖 -n 不覆盖,注意两者顺序 -r, -R 递归复制目录及内部的所有内容 -a 归档,相当于-dR --preserv=all,常用于备份功能 -d --no-dereference --preserv=links 不复制原文件,只复制链接名 --preserv[=ATTR_LIST] mode: 权限 ownership: 属主属组 timestamp: links xattr context all -p 等同--preserv=mode,ownership,timestamp -v --verbose -f --force -u --update 只复制源比目标更新文件或目标不存在的文件 -b 目标存在,覆盖前先备份,默认形式为 filename~ ,只保留最近的一个备份 --backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ ,可以保留多 个版本
8.cp范例:
1)若f1存在,会额外备份一个f1~的文件
[root@centos7 data]# touch fo
[root@centos7 data]# touch f1
[root@centos7 data]# cp fo f1 --backup
[root@centos7 data]# ls
f1 f1~ fo
2)cp -i 会提示是否覆盖
[root@centos7 data]# cp -i fo f1 cp: overwrite ‘f1’? y
3)cp -d 能复制链接
[root@centos7 data]# cp -d grab.cfg1 4ll [root@centos7 data]# ll 4ll lrwxrwxrwx. 1 root root 2 Feb 6 12:38 4ll -> f1
4)cp -R 保留所有权限属性
5)cp -a = cp -dR --preserve=all
9.cp只能复制一般文件
10.mv:移动和重命名文件
mv 命令可以实现文件或目录的移动和改名
同一分区移动数据,速度很快:数据位置没有变化
不同分区移动数据,速度相对慢:数据位置发生了变化
格式:
mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE.
常用选项:
i 交互式 -f 强制 -b 目标存在,覆盖前先备份
11.利用 rename 可以批量修改文件名
格式:
rename [options] <expression> <replacement> <file>...
范例:
#为所有的conf文件加上.bak后缀: [root@centos7 data]# ls fa.txt fc.txt fe.txt fg.txt fi.txt fk.txt fm.txt fo.txt fq.txt fs.txt fu.txt fw.txt fy.txt fb.txt fd.txt ff.txt fh.txt fj.txt fl.txt fn.txt fp.txt fr.txt ft.txt fv.txt fx.txt fz.txt [root@centos7 data]# rename 'txt' 'txt.bak' f* [root@centos7 data]# ls fa.txt.bak fe.txt.bak fi.txt.bak fm.txt.bak fq.txt.bak fu.txt.bak fy.txt.bak fb.txt.bak ff.txt.bak fj.txt.bak fn.txt.bak fr.txt.bak fv.txt.bak fz.txt.bak fc.txt.bak fg.txt.bak fk.txt.bak fo.txt.bak fs.txt.bak fw.txt.bak fd.txt.bak fh.txt.bak fl.txt.bak fp.txt.bak ft.txt.bak fx.txt.bak
#去掉所有的bak后缀: [root@centos7 data]# rename '.bak' '' f* [root@centos7 data]# ls fa.txt fc.txt fe.txt fg.txt fi.txt fk.txt fm.txt fo.txt fq.txt fs.txt fu.txt fw.txt fy.txt fb.txt fd.txt ff.txt fh.txt fj.txt fl.txt fn.txt fp.txt fr.txt ft.txt fv.txt fx.txt fz.txt
12.rm删除文件
使用 rm 命令可以删除文件
注意:此命令非常危险,慎重使用,建议使用 mv 代替 rm
格式:
rm [OPTION]... FILE...
常用选项:
i 交互式 -f 强制删除 -r 递归 --no-preserve-root 删除/
2022-2-6 12:50