
我想知道是否可以有一個創建一個文件的命令,但是每次執行該命令時,它都不會覆蓋上一次執行中創建的文件。
例如: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
指令。