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
,也就是修改後綴名