命令列:如果檔案名稱已存在,則使用新檔案名稱建立文件

命令列:如果檔案名稱已存在,則使用新檔案名稱建立文件

我想知道是否可以有一個創建一個文件的命令,但是每次執行該命令時,它都不會覆蓋上一次執行中創建的文件。

例如:touch test1.txt將建立 1 個名為test1.txt.但是下次執行它時,我希望調用新文件test2.txt,或類似的東西。所以不會覆蓋已經存在的檔案。在某種程度上,它可以毫無問題地執行多次。

不要誤解我,我並不是想用一個命令創建多個文件。

先致謝!

答案1

最簡單的解決方案是在檔案名稱中添加時間戳,而不是使用單一數字。

創建空文件的最簡單方法是touch test$(date +%Y%m%d-%H%M%S),這將產生一個名為test20110802-170410.第二次test*將獲得更新的時間戳,因此將產生 2 個檔案。

答案2

我懷疑是否存在執行此操作的通用命令,但您可以想到類似這樣的命令:

create() {
  read prefix number suffix < <(sed -r 's/(.*)([0-9]+)\.(.*)$/\1 \2 \3/' <<<"$1")
  while true; do
    file="$prefix$number.$suffix"
    if [[ -e "$file" ]]; then
      ((number++))
    else
      touch "$file"
      break
    fi
  done
}

函數的輸入參數分為前綴、數字、後綴,然後數字遞增,直到檔案存在。找到一個空閒插槽,該檔案是用touch.

分割機制應該適應你的需要,並且應該添加各種錯誤檢查。

答案3

如果不需要序號,那麼最簡單的方法就是使用mktemp指令。

相關內容