复习之文件通配符及cp、mv

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.~#~ ,可以保留多
个版本

复习之文件通配符及cp、mv

 

 

 

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

上一篇:[Leetcode Weekly Contest]266


下一篇:220221-220222