將修改日期插入檔案名稱 - 2 種情況

將修改日期插入檔案名稱 - 2 種情況

我相信我會問兩個單獨的問題,但上下文是相同的,所以我希望沒問題。

我有幾個進程的輸出,如下所示(我無法修改)。

25978.csv
26044.csv
26865.csv
26914.csv
27013.csv

我試圖透過此輸入實現的是將日期插入檔案名稱或替換該檔案名稱的「簡單操作」。所需日期通常對應於上次修改日期,因此可以使用並for f in *.csv; do mv -- "$f" "$f-$(date +%Y%m%d -r "${f}")"; done重新命名 oneliner。有時最後修改日期與我要找的日期相差一天,所以我想知道是否有簡單的方法(oneliner?)來減少該數值(例如將 20160506 轉換為 20160505)?

20150506.csv
20150507.csv
20150508.csv
20150509.csv
20150510.csv

第二個案例。上次修改日期沒有用,因為它完全不正確。但檔案名稱中的數字隨著預期日期而增加。我可以在檔案名稱中插入一些數值,並為每個後續檔案將相同的值加一嗎?你明白我想要實現什麼目標嗎?我只是不知道該怎麼辦;)...

編輯 我找到了我的問題的答案這裡- 有點...也許我只是不能使用它?

cnt=0
for i in *; do
  let cnt=cnt+1
  mv "$i" "$(echo "${i}_${cnt}" | awk -F_ '{print $1"_"$3}')"
done

我知道如何根據我的需要修改它,但最終所有文件的輸出都是相同的,例如“增量不起作用”。我已將上面的程式碼保存為rename.sh並記得允許其執行chmod 755 rename.sh,但我仍然什麼也沒想到...

答案1

我希望回答我自己的問題不會構成犯罪。我找到了部分解決方案詢問Ubuntu- 對我有用,至少在第一種情況下。

touch -d "$(date -R -r filename) - 2 hours" filename

若要修改子資料夾中的所有文件,請鍵入:

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done

相關內容