Linux 中文亂碼檔案批量重新命名

2021-09-01 03:10:39 字數 2032 閱讀 3903

借助 find 命令,獲取檔案的索引編號,linux下每個檔案都有乙個編號, 通過 ls -i  可以同時列出檔名和索引編號,

ls -i 一下,可以看到:

檢視到的檔案有亂碼,輸出的每一行有乙個index編號,就是每乙個linux下檔案都有的編號。現在用 awk 來構造新的名字,去掉其中的亂碼字元只留下數字:

ls -i | awk '' 

# 注:這裡 $0 是整個索引編號加檔名,而 $1就是索引編號, $2為中文亂碼名,我猜想中文名中有空格,如果你的中文亂碼不是這裡的,就要做相應的修改,可以自己定義乙個變數 i,然後i++即可!$3為括號加數字,這裡我用 gsub過濾掉所有括號,只留下數字,現在看看列印出來的效果!

太長了就省略掉其他部分

現在利用find重新命名功能:

比如知道乙個檔案的索引編號,可以這樣寫:

find . -inum 492635 -exec mv {} newfilename \; 

find命令網路上很多 , 點號表示當前目錄, find . -inum 後跟你需要重新命名的索引編號,因為這個編號是唯一的,所以只會查出來乙個檔案,不會有多個檔案重複問題,後面的 -exec 表示找到檔案後,執行的命令,這裡執行 shell 的 mv , 移動命令,{} 代表找出來的檔名, 然後是你需要重新命名的新檔名,最後是 \; 前面有乙個空格。

現在用awk來批量構造出這乙個命令吧!

ls -i | awk '", $3 ,"\;"}'

注意:截圖中漏掉了find . 後面那個橫槓 一定要有!

awk 已經構造出了每乙個檔案重新命名的語句,現在只需要把這條語句再通過管道轉接給shell就可以搞定啦!直接在後面加上 | sh 即可!

ls -i | awk '", $3 ,"\;"}' | sh

執行,然後ls一下看看。

ok,現在所有檔案都正常了,而且,沒有搞亂原來的順序哦,因為原來的編號還在,

當然有些檔案是沒有編號的,而且是不可以直接分割出來編號的,這個時候,可以通過自定義乙個變數 i 或者使用awk內部變數 nr(當前處理的行號)來實現。

比如: 

或者使用 

效果一樣,注意,awk使用變數無須定義,直接++i,awk會自動將i初始化為0,這樣++i第一行得到的是 1,

後面跟隨的是副檔名 jpg,如果你的副檔名是不固定的,可以利用gsub提取出副檔名然後追加上去,效果一樣,最後來一條通用的批量重新命名:

檔名寬度是三位數字,不足的前補0.

這句命令的意思,把 $0 即整個檔名和索引編號,賦值給 filename , 然後通過 gsub過濾掉.號之前的任意字元,即filename只剩下副檔名,當然如果有多個副檔名的話,比如,.tar.gz 這類,就需要小心了。

看到生成的語句都很正常,下一步只需要新增  | sh  就可以完成命令功能了!

ls -i | awk ' %03d.%s \;\n", $1, nr, filename)}'  | sh

Sql Server中,檔案批量重新命名

1.新建自定義函式 從最後乙個特定字元開始擷取字串 create function fn getlastcharindex chars varchar 1000 char varchar 10 returns varchar 1000 begin declare iint set i charind...

Linux環境下檔案批量複製指令碼

簡介 在做專案的時候,有一種需求,class檔案只能先以普通使用者身份用ftp複製到linux,然後用shell工具以root使用者將ftp複製來的檔案複製到對應的專案目錄,很麻煩,所以寫了一段指令碼完成這些任務。功能 只需要把要複製的檔案放到同乙個臨時目錄當中,然後修改指令碼檔案,sourcepa...

Linux中便捷的檔案批量處理

在linux的實際使用過程中,建立多個檔案 修改多個檔案 查詢檔案中的某個部分等需求都需要有一種能夠實現檔案批量處理的方法,這篇文章主要介紹了常用的一些檔案批量操作指令,大家一起學習一下吧。匹配0 任意字元 alpha 匹配單個字母 lower 匹配單個小寫字母 upper 匹配單個大寫字母 dig...