Rename
如果文件已存在,則重命名文件並附加一個數字
我想編寫一個腳本,如果文件已經存在,它將重命名文件並在末尾附加一個數字。
mv a.txt b.txt
由於 b.txt 已經存在,b.txt.1 將是重命名的文件,如果我再次使用它,我將得到 b.txt.2,因為 b.txt 存在並且 b.txt.1 存在
我知道 mv 有一個選項,mv –backup,但這給了我 b.txt~.1~,但我不想要它之前和之後的 ~。是否有另一種選擇只是附加數字。
是的。由於您表示願意編寫腳本,因此您需要了解以下內容:
- 測試文件是否存在:shell 表達式
[ -e filename ]
。請參閱man
頁面了解您可以執行的許多其他測試。為了讓人們更好地閱讀man
頁面,我建議他們習慣學習如何在長man
頁面中搜尋項目。通常,現代 linux’es 將其man
命令配置為使用less
瀏覽器。有了它,可以使用/
和 正則表達式執行搜尋,因此-e
可以通過/^ *-e
. 只需按 重複/
。- 從文件名中刪除後綴副檔名:shell 表達式
${var%.*}
會執行此操作,因此將文件名保存在變數中,然後對變數執行該操作以獲取文件的基本名稱。- 獲取文件名的後綴副檔名:
${var##*.}
. 再次,查看man
您的 shell 的頁面(例如man sh
,man bash
)- 創建一個新文件名:類似
new="${old%.*}${counter}${old##*.}"
- 所以,你想執行一個
while
循環,檢查一個新的文件名不存在,如果它存在,增加一個變數。一旦它不存在,mv
使用該文件名作為目標執行。- 可以通過以下方式在 shell 腳本中增加變數:
count=$((++count))
.