The question is published on by Tutorial Guruji team.
I believe I’ll ask two separate questions, but the context is the same, so I hope it’s alright.
I have an output of few processes as presented below (which I can’t modify).
25978.csv 26044.csv 26865.csv 26914.csv 27013.csv
What I’m trying to achieve with this input is the ‘simple operation’ of inserting the date into the filename or substitute that filename. Desired date usually corresponds to last modified date, so it’s doable with for f in *.csv; do mv -- "$f" "$f-$(date +%Y%m%d -r "${f}")"; done
and renaming oneliner.
Sometimes the last modified date is a one day away from what I look for, so I’m wondering if there is an easy way (oneliner?) to decrease that numeric value (e.g. to transform 20160506 into 20160505)?
20150506.csv 20150507.csv 20150508.csv 20150509.csv 20150510.csv
The second case. Last modified date is not useful, since it’s completely incorrect. But the number in the filename increases along with expected date. Can I insert some numeric value into the filename and have the same value increase by one for each subsequent file? You see what I’m trying to accomplish? I just don’t know how ;)…
EDIT I’ve found an answer for my question here – kind of… Maybe I just can’t use it?
cnt=0 for i in *; do let cnt=cnt+1 mv "$i" "$(echo "${i}_${cnt}" | awk -F_ '{print $1"_"$3}')" done
I know how to modify it for my needs, but in the end the output is the same for all files, like the ‘incrementation is not working’. I’ve saved code from above as rename.sh
and remembered about allowing its execution by chmod 755 rename.sh
, but still I came up with nothing…
Answer
I hope it won’t be a crime, to answer my own question. I’ve found partial solution at AskUbuntu – works for me, at least in the first case.
touch -d "$(date -R -r filename) - 2 hours" filename
And for modification of all files in subfolder, type:
find DIRECTORY -print | while read filename; do # do whatever you want with the file touch -d "$(date -R -r "$filename") - 2 hours" "$filename" done