练习笔记-文件管理之通配符批量改名 20201227
通配符
文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件
通配符采有特定的符号,表示特定的含义,此特符号称为元 meta 字符
常见的通配符如下:
* 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件 ? 匹配任何单个字符 ~ 当前用户家目录 ~mage 用户mage家目录 ~+和. 当前工作目录 ~- 前一个工作目录 [0-9] 匹配数字范围 [a-z] 字母 [A-Z] 字母 [wang] 匹配列表中的任何的一个字符 [^wang] 匹配列表中的所有字符以外的字符
[root@centos8 ~]# touch 我
[root@centos8 ~]# ls ?
ls: cannot access '?': No such file or directory
[root@centos8 ~]# ls ? (#英文状态的?)
我
其他:
[root@centos8 ~]# ls .*
[root@centos8 ~]# ls * f(#f前面有空格匹配)
ls: cannot access 'f': No such file or directory
anaconda-ks.cfg f14 f20 f27 f33 f4 f46 f52 f59 f65 f71 f78 f84 f90 f97
f1 f15 f21 f28 f34 f40 f47 f53 f6 f66 f72 f79 f85 f91 f98
f10 f16 f22 f29 f35 f41 f48 f54 f60 f67 f73 f8 f86 f92 f99
f100 f17 f23 f3 f36 f42 f49 f55 f61 f68 f74 f80 f87 f93 f11 f18 f24 f30 f37 f43 f5 f56 f62 f69 f75 f81 f88 f94 f12 f19 f25 f31 f38 f44 f50 f57 f63 f7 f76 f82 f89 f95 f13 f2 f26 f32 f39 f45 f51 f58 f64 f70 f77 f83 f9 f96 我
举例:
[root@centos8 ~]# ll f[1--5] -rw-r--r--. 1 root root 0 Feb 28 11:18 f5
其他:
[root@centos8 ~]# ll f[1-5] -rw-r--r--. 1 root root 0 Feb 28 11:18 f1 -rw-r--r--. 1 root root 0 Feb 28 11:18 f2 -rw-r--r--. 1 root root 0 Feb 28 11:18 f3 -rw-r--r--. 1 root root 0 Feb 28 11:18 f4 -rw-r--r--. 1 root root 0 Feb 28 11:18 f5 [root@centos8 ~]# ll f[1..5] -rw-r--r--. 1 root root 0 Feb 28 11:18 f1 -rw-r--r--. 1 root root 0 Feb 28 11:18 f5 [root@centos8 ~]# ll f{1..5} -rw-r--r--. 1 root root 0 Feb 28 11:18 f1 -rw-r--r--. 1 root root 0 Feb 28 11:18 f2 -rw-r--r--. 1 root root 0 Feb 28 11:18 f3 -rw-r--r--. 1 root root 0 Feb 28 11:18 f4 -rw-r--r--. 1 root root 0 Feb 28 11:18 f5 [root@centos8 ~]#
☆小练习:
举例1:批量改名
[root@localhost ~]# touch f{1..10}.conf
[root@localhost ~]# touch f{1..10}.conf [root@localhost ~]# ls 1 f10.conf f3.conf f6.conf f9.conf 1.txt f1.conf f4.conf f7.conf anaconda-ks.cfg f2.conf f5.conf f8.conf [root@localhost ~]# rename conf conf.bak * [root@localhost ~]# ls 1 f1.conf.bak f5.conf.bak f9.conf.bak 1.txt f2.conf.bak f6.conf.bak anaconda-ks.cfg f3.conf.bak f7.conf.bak f10.conf.bak f4.conf.bak f8.conf.bak
再次改回来:
1 [root@localhost ~]# rename conf.bak conf * 2 [root@localhost ~]# ls 3 1 f10.conf f3.conf f6.conf f9.conf 4 1.txt f1.conf f4.conf f7.conf 5 anaconda-ks.cfg f2.conf f5.conf f8.conf
-------------------------------------------------------------------
举例2:批量改名练习
1.创建10个.txt后缀的文件名
1 [00:43:46 root@localhost data]#touch f{1..10}.txt 2 [00:44:35 root@localhost data]#ls 3 f10.txt f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt f7.txt f8.txt f9.txt
2.修改后缀
1 [00:47:57 root@localhost data]#rename "txt" "txt.bak" * 2 [00:48:10 root@localhost data]#ls 3 f10.txt.bak f1.txt.bak f2.txt.bak f3.txt.bak f4.txt.bak f5.txt.bak f6.txt.bak f7.txt.bak f8.txt.bak f9.txt.bak 4 [00:48:12 root@localhost data]#
顺便查看一下绝对路径:
1 [00:44:28 root@localhost data]#ls | sed "s:^:`pwd`/:" 2 /data/f10.txt.bak 3 /data/f1.txt.bak 4 /data/f2.txt.bak 5 /data/f3.txt.bak 6 /data/f4.txt.bak 7 /data/f5.txt.bak 8 /data/f6.txt.bak 9 /data/f7.txt.bak 10 /data/f8.txt.bak 11 /data/f9.txt.bak
再次改回来另外一种办法:
1 [00:57:55 root@localhost data]#ls 2 f10.txt.bak f1.txt.bak f2.txt.bak f3.txt.bak f4.txt.bak f5.txt.bak f6.txt.bak f7.txt.bak f8.txt.bak f9.txt.bak 3 [00:57:55 root@localhost data]#rename ".bak" " " * 4 [00:58:11 root@localhost data]#ls 5 f10.txt f1.txt f2.txt f3.txt f4.txt f5.txt f6.txt f7.txt f8.txt f9.txt 6 [00:58:13 root@localhost data]#
往期命令练习:
计算当前目录下的文件数和目录数:
ls -l * |grep "^-"|wc -l ---文件个数
1 [root@localhost ~]# ls -l * |grep "^-"|wc -l2 13
ls -l * |grep "^d"|wc -l ---目录个数
1 [root@localhost ~]# ls -l * |grep "^d"|wc -l2 0
在ls中列出文件的绝对路径
命令:ls | sed "s:^:`pwd`/:"
1 [root@localhost ~]# ls | sed "s:^:`pwd`/:" 2 /root/1 3 /root/1.txt 4 /root/anaconda-ks.cfg 5 /root/f10.conf 6 /root/f1.conf 7 /root/f2.conf 8 /root/f3.conf 9 /root/f4.conf 10 /root/f5.conf 11 /root/f6.conf 12 /root/f7.conf 13 /root/f8.conf 14 /root/f9.conf