#《快乐的 Linux 命令行》

今天是晚餐后看的,看完想睡一会,困

#通配符

  • * 匹配任意多个字符(包括零个或一个)
  • ? 匹配任意一个字符(不包括零个)
  • [characters] 匹配任意一个属于字符集中的字符
  • [!characters] 匹配任意一个不是字符集中的字符
  • [[:class:]] 匹配任意一个属于指定字符类中的字符

字符类

  • [:alnum:] 匹配任意一个字母或数字
  • [:alpha:] 匹配任意一个字母
  • [:digit:] 匹配任意一个数字
  • [:lower:] 匹配任意一个小写字母
  • [:upper:] 匹配任意一个大写字母

一些示例:

  • * 所有文件
  • g* 文件名以“g”开头的文件
  • b*.txt 以“b” 开头,中间有零个或任意多个字符,并以”.txt”结尾的文件
  • Data???Data开头,其后紧接着3个字符的文件
  • [abc]* 文件名以abc开头的文件
  • BACKUP.[0-9][0-9][0-9]BACKUP.开头,并紧接着3个数字的文件
  • [[:upper:]]*大写字母开头的文件
  • [![:digit:]]* 不以数字开头的文件
  • *[[:lower:]123] 文件名以小写字母结尾,或以123结尾的文件

之前写正则时候的[A-Z][a-z]虽然都有效果,但是已经很老了,不一定会有期望的效果,可以弃用了。

虽然它们仍然起作用,但是你必须小心地使用它们,因为它们不会产生你期望的输出结果,除非你合理地配置它们。从现在开始,你应该避免使用它们,并且用字符类来代替它们。

#创建目录

命令:

1
mkdir directory...

上面命令的...代表那个参数可以重复,即可以一次性创建多个文件:

1
mkdir dir1 dir2 dir3

会创建三个目录。

#复制文件和目录

两种用法:

1
cp item1 item2

复制单个文件或目录item1到文件或目录item2

1
cp item1... directory

复制多个项目(文件或目录)到一个目录下。

cp命令的一些参数选项:

选项 长选项 描述
-a --archive 复制文件和目录,以及它们的属性,包括所有权和权限。通常,副本具有用户所操作文件的默认属性。
-i --interactive 在重写已存在文件之前,提示用户确认。如果这个选项不指定,cp 命令会默认重写文件。
-r --recursive 递归地复制目录及目录中的内容。当复制目录时,需要这个选项(或者-a 选项)。
-u --update 当把文件从一个目录复制到另一个目录时,仅复制目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。
-v --verbose 显示详细的命令操作信息

示例:

  • cp file1 file2 复制文件 file1 内容到文件 file2。如果 file2 已经存在,file2 的内容会被 file1 的内容重写。如果 file2 不存在,则会创建 file2。
  • cp -i file1 file2 这条命令和上面的命令一样,除了如果文件 file2 存在的话,在文件 file2 被重写之前,会提示用户确认信息。
  • cp file1 file2 dir1 复制文件 file1 和文件 file2 到目录 dir1。目录 dir1 必须存在。
  • cp dir1/* dir2 使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。dir2 必须已经存在。
  • cp -r dir1 dir2 复制目录 dir1 中的内容到目录 dir2。如果目录 dir2 不存在,创建目录 dir2,操作完成后,目录 dir2 中的内容和 dir1 中的一样。如果目录 dir2 存在,则目录dir1目录中的内容将会被复制到dir2中。

最后一个比较难理解,做个例子自己试一下!

#示例

首先创建一下测试的环境:

1
2
3
4
5
6
7
8
9
10
11
12
onns@DESKTOP-5JJP7PL:~$ ls
onns@DESKTOP-5JJP7PL:~$ mkdir dir1
onns@DESKTOP-5JJP7PL:~$ mkdir dir2
onns@DESKTOP-5JJP7PL:~$ vi dir1/text1
onns@DESKTOP-5JJP7PL:~$ vi dir2/text2
onns@DESKTOP-5JJP7PL:~$ vi dir1/text3
onns@DESKTOP-5JJP7PL:~$ ls dir1/ dir2/
dir1/:
text1 text3

dir2/:
text2

然后执行一下命令:

1
onns@DESKTOP-5JJP7PL:~$ cp -r dir1 dir2

然后查看结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
onns@DESKTOP-5JJP7PL:~$ ls dir1 dir2
dir1:
text1 text3

dir2:
dir1 text2
onns@DESKTOP-5JJP7PL:~$ ls dir1 dir2 dir2/dir1
dir1:
text1 text3

dir2:
dir1 text2

dir2/dir1:
text1 text3