復習之文件通配符及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.~#~ ,可以保留多
個版本

 

 

 

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>...

范例:

#為所有的txt文件加上.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM