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