Linux 遞歸修改後綴名

1 修改命令

需要用到:

  • find
  • awk
  • xargs

遞歸修改命令如下:

find . -name '*.XXX' | awk -F "." '{print $2}' | xargs -i -t mv ./{}.XXX ./{}.XXXX

XXX後綴修改爲XXXX

2 find

find用來在指定目錄下查找文件,位於參數之前的字符串都被視爲需要查找的目錄。
find . -name '*.XXX'中:

  • .表示當前文件夾
  • -name表示文件名符合name的文件,有一個類似的-iname會忽略大小寫
  • *.XXX表示尋找所有的XXX後綴的文件

其他常用例子:

  • find . -type f:遞歸列出一般文件
  • find . -ctime -20:遞歸列出最近20天內更新過的文件
  • find /var/log -type f -mtime +7 -ok rm {} \;:查找/var/log下更新時間在7日以前的普通文件,並在刪除之前詢問
  • find . -type f -perm 644 -exec ls -l {} \;:查找當前目錄下權限爲644的文件
  • find / -type f -size 0 -exec ls -l {} \;:查找/下文件大小爲0的普通文件並列出完整路徑

3 awk

awk是一種處理文本文件的語言,是一個強大的分析工具。
awk -F "." '{print $2}'中:

  • -F指定輸入文件拆分分隔符,因爲需要修改後綴名,後綴名與主文件名由.分隔,因此後面加上"."參數
  • '{print $2}'print表示打印,$在awk中表示字段引用,這裏$2表示引用第二個字段,字段根據前面的-F參數進行分隔。
  • 因爲find打印出來的是./a/b/c.XXX,因此print $2會打印其中第二個字段,就是路徑/a/b/c,而print $1爲空(因爲第一個.之前沒有其他內容),print $3爲後綴名

4 xargs

xargs是給命令傳遞參數的一個過濾器,可以將管道或者標準輸入數據轉換爲命令行參數,默認的命令爲echo。使用xargs可以對不支持管道的命令添加類似管道的功能,比如:

find . -name '*.jpg' | ls -l 
# 錯誤,但是能執行,執行的結果僅僅是ls -l的結果

find . -name '*.jpg' | xargs ls -l 
# 正確

xargs -i -t mv ./{}.XXX ./{}.XXXX中:

  • -i表示將xargs的每項名稱,一般是一行一行賦值給後面的{}
  • -t可選,表示先打印需要執行的命令(這裏是先打印mv)再執行
  • mv:重命名
  • {}:配合-i使用,這裏的{}表示前一步awk中的路徑名,對每一個路徑都執行一次mv,也就是修改後綴名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章