Rename

如果文件已存在,則重命名文件並附加一個數字

  • March 22, 2018

我想編寫一個腳本,如果文件已經存在,它將重命名文件並在末尾附加一個數字。

mv a.txt b.txt

由於 b.txt 已經存在,b.txt.1 將是重命名的文件,如果我再次使用它,我將得到 b.txt.2,因為 b.txt 存在並且 b.txt.1 存在

我知道 mv 有一個選項,mv –backup,但這給了我 b.txt~.1~,但我不想要它之前和之後的 ~。是否有另一種選擇只是附加數字。

是的。由於您表示願意編寫腳本,因此您需要了解以下內容:

  1. 測試文件是否存在:shell 表達式[ -e filename ]。請參閱man頁面了解您可以執行的許多其他測試。為了讓人們更好地閱讀man頁面,我建議他們習慣學習如何在長man頁面中搜尋項目。通常,現代 linux’es 將其man命令配置為使用less瀏覽器。有了它,可以使用/和 正則表達式執行搜尋,因此-e可以通過/^ *-e. 只需按 重複/
  2. 從文件名中刪除後綴副檔名:shell 表達式${var%.*}會執行此操作,因此將文件名保存在變數中,然後對變數執行該操作以獲取文件的基本名稱。
  3. 獲取文件名的後綴副檔名:${var##*.}. 再次,查看man您的 shell 的頁面(例如man sh, man bash
  4. 創建一個新文件名:類似new="${old%.*}${counter}${old##*.}"
  5. 所以,你想執行一個while循環,檢查一個新的文件名不存在,如果它存在,增加一個變數。一旦它不存在,mv使用該文件名作為目標執行。
  6. 可以通過以下方式在 shell 腳本中增加變數:count=$((++count)).

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