2017-10-17 48 views
0

我有一個文件的目錄,我需要使用時間戳重命名爲給定的字符串。For循環刪除文件而不是重命名

我使用下面的代碼:

for file in itvl_* 
do 
    mv "$file" "Interval_$(stat -c %Y "$file" | date +%Y%m%d%H%M%S).Interval_001" 
done 

當我運行在符合給定的面具itvl_ *文件的目錄的腳本,它會刪除所有,但一個或兩個文件,然後成功地重命名組中的最後一個文件。

這裏可能會發生什麼?

+2

你的「秒」不足以區分文件 - bash可能在同一秒內重命名所有文件的大部分,創建具有相同文件名的多個文件。 – Raizuri

+1

'日期'不從標準輸入中讀取;您所做的只是將當前日期/時間用於新文件名。你希望'$(date +%Y%m%d%H%M%S --date $(stat -c%Y「$ file」))'將'stat'的結果用作'date的參數'。 – chepner

回答

1

它不會刪除所有的文件,它只是簡單地將它們全部重命名爲相同的目標名稱。

您可以通過運行看出來:

for file in itvl_* 
do 
    echo "Interval_$(stat -c %Y "$file" | date +%Y%m%d%H%M%S).Interval_001" 
done 

其結果是,它們將覆蓋彼此只有最後一個倖存。