Shell-Script
將修改日期插入文件名 - 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
,但我仍然一無所獲……
我希望這不會是犯罪,回答我自己的問題。我在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