重命名多個文件;附加
我正在尋找重命名具有相同名稱的多個文件,但文件名的末尾除外。我想用增量計數器替換不同的部分。例如,使用以下文件,
71116_123 71116_134 71116_113 71116_023 71116_923 71116_103 71116_125 71116_223
我想將它們重命名為
71116_1 71116_2 71116_3 71116_4 71116_5 71116_6 71116_7 71116_8
我在這裡發現了一個類似的問題,但是給定的解決方案似乎有些複雜!有沒有更簡單的解決方案?
因此,鑑於您提供的資訊有限,讓我陳述我的假設,如果有任何錯誤,請告訴我,我/我們可以調整答案。這些假設對於保持邏輯簡短和甜蜜至關重要,否則您確實會陷入“矯枉過正”的模式。
假設 1. 文件的“後綴”是您要更改的內容,“後綴”是下劃線後的數字,這意味著下劃線(“_”)是您的分隔符。
假設 2. 原始文件名中只會有一個下劃線 - 不是兩個或更多下劃線,也沒有下劃線
假設 3。您希望“前綴”,即分隔符之前的值(如假設 1 中所定義)保持完全相同。
假設 4. 無論原始後綴如何,您都希望新後綴使用相同的分隔符(如假設 1 中所定義),並且新後綴不按時間戳或任何其他值而不是之前的排序順序遞增重命名(意思是,由文件名的原始字母數字排序順序驅動)。
假設 5。您希望它相當“簡單”,不幸的是,這完全是任意的,但我將其定義為“沒有復雜的 for 循環或 while 循環”和“沒有太多奇怪的 sed 或 awk”命令。
因此,這不是一個難題,但考慮到列出的限制,它確實成為有趣的挑戰。無論如何,我仍然使用“簡單”的 for 循環和“簡單”的 awk:
cnt=0 for i in *; do let cnt=cnt+1 mv "$i" "$(echo "${i}_${cnt}" | awk -F_ '{print $1"_"$3}')" done
如果您不想重命名同一目錄中的其他文件,就像我最初的測試中的情況一樣(我在該目錄中進行測試,該
/tmp
目錄中有其他我不想重命名的文件),然後使用某些部分進行過濾前綴,像這樣:cnt=0 for i in 71116*; do let cnt=cnt+1 mv "$i" "$(echo "${i}_${cnt}" | awk -F_ '{print $1"_"$3}')" done
我確實查看了您連結中的答案 - 我同意這些都是非常過分的,就像 stackexchange 上的許多答案一樣。但是,大多數“矯枉過正”的答案都依賴於較少的假設,因此從理論上講,它們比我在這裡提供的更“通用”和/或更“便攜”。