Filenames

刪除然後重命名:相同的文件名不同的副檔名

  • November 12, 2018

我有一個包含數千個文件的目錄,每個文件都有一個副本。一個例子:

file1.txt
file1.jpg.txt

file2.txt
file2.jpg.txt

我想刪除所有 *.txt 文件,並留下 *.jpg.txt 然後我想將所有 *.jpg.txt 重命名為 *.txt only

我在 OpenSuse 12 上執行

正如@roaima 提到的,您不需要先刪除文件,移動文件時會自動覆蓋舊文件。

一種方法是在 bash 中使用 for 循環:

for f in *.jpg.txt; do mv $f ${f/%.jpg.txt/.txt}; done

讓我解釋:

  • for f in *.jpg.txt; do <command>; done:對每個文件執行命令*.jpg.txt。執行時文件名儲存在變數中f
  • ${f/%.jpg.txt/.txt}: 的值$f,但最後一次出現的.jpg.txt被替換為.txt。有關更多範例,請參見https://www.tldp.org/LDP/abs/html/parameter-substitution.html
  • mv $f ${f/%.jpg.txt/.txt}: 將舊文件重命名為不帶.jpg.

在執行此程式碼之前,您可以向自己保證,它會通過執行

for f in *.jpg.txt; do echo $f ${f/%.jpg.txt/.txt}; done

這將列印出將要移動的文件對。

引用自:https://unix.stackexchange.com/questions/481209