文件名通配符与touch命令

时间:2022-02-12 19:15:41

一、touch
           touch filename

           若文件不存在,则创建一个空文件

[root@localhost ~]# touch hi
[root@localhost ~]# stat hi
   File: ‘hi’
   Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 50558257    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0 Access:
2018-07-15 12:11:05.022054456 +0800 Modify: 2018-07-15 12:11:05.022054456 +0800 Change: 2018-07-15 12:11:05.022054456 +0800 Birth: -

           若文件存在,则更新三个时间戳

  1.  -a filename 仅更新atime ctime
[root@localhost ~]# touch -a hi
[root@localhost ~]# stat hi
   File: ‘hi’
   Size: 6             Blocks: 8          IO Block: 409
Device: fd00h/64768d    Inode: 50558257    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: 
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-03-04 05:10:13.225008912 +0800
Modify: 2018-07-15 12:12:04.206056540 +0800
Change: 2020-03-04 05:10:13.225008912 +0800
  Birth: -

    

      2.    -m filename 仅更新mtime ctime

[root@localhost ~]# touch -m hi
[root@localhost ~]# stat hi
  File: ‘hi’
  Size: 6             Blocks: 8          IO Block: 409
Device: fd00h/64768d    Inode: 50558257    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: 
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-03-04 05:10:13.225008912 +0800
Modify: 2020-03-04 05:10:30.795009531 +0800
Change: 2020-03-04 05:10:30.795009531 +0800
Birth: -

 

        3.   -c filename 若文件存在,则更新三个时间戳
                                       若文件不存在,不会创建


        4.   -t 203010012050.30 fstab  将时间戳更新为指定时间

[root@localhost ~]# touch -t 201807151222 hi
[root@localhost ~]# stat hi
   File: ‘hi’
   Size: 6             Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 50558257    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2018-07-15 12:22:00.000000000 +0800
Modify: 2018-07-15 12:22:00.000000000 +0800
Change: 2020-03-04 05:19:19.689028146 +0800
  Birth: -

 

 

二、 文件名通配符

  1.   * 匹配0或多个任意字符

                   a* 以a为开头的0或多个任意字符

[root@localhost ~]# touch agtijn
[root@localhost ~]# touch a4t59
[root@localhost ~]# ls a*
a4t59  agtijn

 

       2.   ? 匹配任意1个字符

          a?*匹配a为开头,任意2个或以上字符的文件

[root@localhost ~]# ls a?*
a4t59  agtijn

 

      3.    [0-9] 10个数字中任意一个,只能是一位

[root@localhost ~]# ls [0-9]
4  5  7

 

     4.    [0-9]*    开头为数字,其他为任意字符的文件名

[root@localhost ~]# ls [0-9]*
4  4556  5  578  7

 

      [a-z]           表示aAbBcC……z
     [A-Z]          表示AbBcC……Z
     [a-Z]           表示所有大小写字母
     [ae]            表示是a或e的单一字符
     [^ae]            表示即不是a也不是e的其他任意单一字符
     [:lower:]       表示小写字母
     [:upper:]      表示大写字母
     [:alpha:]      表示大小写字母
     [:digit:]        表示任意数字 等于0-9
     [:alnum:]     表示任意字母及数字 等于a-Z0-9或[[:digit:][:alpha:]]
     [:blank:]      水平空白字符
     [:space:]     水平或垂直空白字符 文件名不可能包含回车,故此处使用与[:blank:]:效果相同
     [:punct:]       表示符号

练习:使用touch {1..100} 创建1到100这100个文件,显示1-35

[root@localhost ~]# touch {1..100}
[root@localhost ~]# ls [0-9] [1-2][0-9] [3][0-5]
1   13  17  20  24  28  31  35  7
10  14  18  21  25  29  32  4   8
11  15  19  22  26  3   33  5   9
12  16  2   23  27  30  34  6

  

1、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录

       ls  -d  /etc/ [^[:alpha:]][[:alpha:]]*  

2、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录

      ls  -d  /etc/ rc[0-6]*

3、显示/etc目录下,所有以.d结尾的文件或目录

      [root@localhost test]# ls  -d  /etc/*.d 

4、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录

      ls  -d /etc/[mnrp]*.conf

5、只显示/root下的隐藏文件和目录

       ls –d /root/.*
6、只显示/etc下的非隐藏目录

        ls –d  /etc/[^.]*
7、显示/etc目录下所有以k开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录

       ls –d /etc/k*[0-9]*[[:lower:]]

8、显示/proc目录下名字由任意三位数字组成的文件或目录

      ls –d /proc/[0-9][0-9][0-9]
9、显示/var/log目录下文件名包含符号及数字的文件或目录

      ls –d  /var/log/*[[:punct:]]*[[:digit:]]*

10、显示/usr/share/man目录下所有以m开头,以一个数字和x结尾的文件或目录

       ls –d /usr/share/man/m*[[:digit:]]x

11、显示/etc目录下,所有以一个大写字母开头,以两个数字结尾的文件或目录

        ls –d  /etc/[[:upper:]]*[[:digit:]][[:digit:]]

12、显示/etc目录下,文件名至少包含一个小写字母和一个数字并以.conf结尾的文件或目录

         ls –d  /etc/*[[:lower:]]*[[:digit:]]*.conf
13、只显示用户家目录下的非隐藏目录

         ls -d ~/[^.]*

14、定义别名命令baketc,将/etc/目录下所有文件,备份到/testdir独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见

       alias baketc='cp -rv /etc testdir/backup`date +%F`'

15、创建/testdir/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限

       cp –prv   /root testdir/rootdir

16、如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

       mkdir -p testdir/dir{3,4,5/dir{6,7}}

       tree testdir/

17、使用一条命令创建/testdir/dir8/x, /testdir/dir8/y, /testdir/dir8/x/a, /testdir/dir8/x/b, /testdir/dir8/x/c, /testdir/dir8/y/a, /testdir/dir8/y/b

        mkdir -p testdir/dir8/{x/{a,b,c},y{a,b}}

        tree testdir/

18、使用一条命令创建 /testdir/dir9/x, /testdir/dir10/y, /testdir/dir9/x/a,  /testdir/dir10/y/b

       [root@localhost ~]# mkdir -p testdir/dir{9/x/a,10/y/b}

       [root@localhost ~]# tree testdir/

19、 使用一条命令创建/testdir/dir11, /testdir/dir12, /testdir/dir13, /testdir/dir12/dir14, /testdir/dir13/dir15

        [root@localhost ~]# mkdir -p testdir/dir{11,12/dir14,13/dir15}

        [root@localhost ~]# tree testdir/