BASH如何獲得某個(gè)目錄下的某類文件的文件名
假設(shè)某個(gè)目錄下有一堆以jpeg為后綴的文件名,我們需要在另一個(gè)目錄中獲得他們的文件名,并輸出。
可以聯(lián)合使用ls,awk,sed等命令來(lái)完成。
方法一:
使用ls列出目錄下以.jpeg為結(jié)尾的文件,然后逐個(gè)處理每一個(gè),逐個(gè)輸出。
ls thepath/*.jpeg | awk -F '/' '{print $NF}' | awk -F '.' '{print $1}'
方法二:
最后一步不用awk,而是用sed的替換命令,將‘.jpeg’替換為空。
ls thepath/*.jpeg | awk -F '/' '{print $NF}' | sed 's/.jpegs*$//'
說(shuō)明:
1、awk主要可以用來(lái)對(duì)單行分割,分割的后的單個(gè)項(xiàng),可以用$num 來(lái)輸出,其中num是所要輸出的項(xiàng)的列編號(hào)。NF是awk的內(nèi)置變量,表示最后一個(gè)項(xiàng)。
2、awk按行處理,盡管ls輸出的時(shí)候不是把每個(gè)文件單行輸出的,但是它每輸出一個(gè),接著就會(huì)緊接著被處理,所以最終結(jié)果也是按行的。
3、awk的-F選項(xiàng)用于指定每行中的分割符,可以使用正則表達(dá)式,比如可以使用‘[/.]’表示/或者.用來(lái)做分割符。但是不要用.第一次來(lái)做分割符,因?yàn)?可以存在一個(gè)文件名中多次。
4、sed也是按行處理文本的,其匹配方式也遵循正則表達(dá)式。
5、sed的執(zhí)行命令s表示的替換的意思,命令中jpeg后面的$表示匹配行末尾。如果文本末尾有空白字符還需要加上s*