Shell-Script

將修改日期插入文件名 - 2 例

  • May 20, 2016

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

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

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,但我仍然一無所獲……

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

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

引用自:https://unix.stackexchange.com/questions/283992