Linux 通配符完全指南:從基礎(chǔ)語法到實戰(zhàn)應(yīng)用
在文件操作章節(jié)中,我們學(xué)習(xí)了一些實用命令,但它們一次只能操作單個文件,效率不高?,F(xiàn)在我將介紹一種批量處理文件的方法。
什么是通配符?
通配符是一組規(guī)則符號,用于創(chuàng)建定義文件或目錄集合的模式。正如你所知,在命令行中引用文件或目錄時,實際是在引用路徑。而在路徑中使用通配符,可以將其轉(zhuǎn)換為一組文件或目錄。
基本通配符集合:
- *:匹配零個或多個字符
- ?:匹配單個字符
- []:匹配范圍內(nèi)的單個字符

基礎(chǔ)示例
以*為例,以下命令將列出所有以字母b開頭的條目:
pwd
/home/ryan/linuxtutorialwork
ls
barry.txt blah.txt bob example.png firstfile foo1 foo2
foo3 frog.png secondfile thirdfile video.mpeg
ls b*
barry.txt blah.txt bob底層原理
這里的機制很有趣:你可能以為ls命令會直接處理b*參數(shù),但實際上是bash(提供命令行界面的程序)完成了模式匹配。當輸入包含通配符的命令時,系統(tǒng)會先將模式替換為所有匹配的文件或目錄路徑,再執(zhí)行命令。例如:
# 輸入命令
ls b*
# 系統(tǒng)轉(zhuǎn)換為
ls barry.txt blah.txt bob
# 再執(zhí)行程序因此,通配符可在任何命令行中使用,不受程序限制。
更多示例
假設(shè)當前目錄為linuxtutorialwork,且包含上述文件,以下是通配符的應(yīng)用場景:
(1) 匹配所有.txt后綴文件(絕對路徑)
ls /home/ryan/linuxtutorialwork/*.txt
/home/ryan/linuxtutorialwork/barry.txt /home/ryan/linuxtutorialwork/blah.txt(2) 匹配第二個字母為i的文件(?通配符)
ls ?i*
firstfile video.mpeg(3) 匹配三字母后綴的文件(.???)
ls *.???
barry.txt blah.txt example.png frog.png注意:video.mpeg后綴為.mpeg,四字母,不匹配
(4) 匹配以s或v開頭的文件([]范圍匹配)
ls [sv]*
secondfile video.mpeg(5) 匹配包含數(shù)字的文件([0-9]范圍)
ls *[0-9]*
foo1 foo2 foo3(6) 匹配非a-k開頭的文件([^]取反)
ls [^a-k]*
secondfile thirdfile video.mpeg實際應(yīng)用場景
通配符的用途極為廣泛,以下是幾個典型案例:
(1) 查看目錄中所有文件的類型
file /home/ryan/*
bin: directory
Documents: directory
frog.png: PNG image data
public_html: directory(2) 將所有jpg/png圖片移動到指定目錄
mv public_html/*.??g public_html/images/(3) 查看所有用戶家目錄中的.bash_history文件
ls -lh /home/*/.bash_history
-rw------- 1 harry users 2.7K Jan 4 07:32 /home/harry/.bash_history
-rw------- 1 ryan users 3.1K Jun 12 21:16 /home/ryan/.bash_history




































