Filenames
刪除然後重命名:相同的文件名不同的副檔名
我有一個包含數千個文件的目錄,每個文件都有一個副本。一個例子:
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
這將列印出將要移動的文件對。