简体   繁体   中英

Changing File name Dynamically in linux bash

I want to change a filename "Domain_20181012230112.csv" to "Domain_12345_20181012230112.csv" where "Domain" and "12345" are constants while 20181012230112 is always gonna change but with fix length. In bash how can I do this

If all you want is to replace Domain_ with Domain_12345_ , then just do

for file in Domain_*; 
do
    mv "$file" "${file/Domain_/Domain_12345_}"
done

You can make it even shorter if you know that there will only be one underscore:

...
    mv "$file" "${file/_/_12345_}"
...

See string substitutions for more info.

You can simply use the date command to get the date and time information you want

date '+%Y-%m-%d %H:%M:%S'
# 2018-10-26 10:25:47

To then use the result within the filename, you can put it in `` to evaluate it inline, for example you can run

echo "Domain_12345_`date '+%Y-%m-%d %H:%M:%S'`"
# Domain_12345_2018-10-26 10:29:17

You can use the date's man page to figure out the option for milliseconds to add es well.

man date

There are different options like %m and %d for example that always have leading zeroes if necessary, so the file name length stays constant.

To then rename the file you can use the mv (move) command

mv "Domain_20181012230112.csv" "Domain_12345_`date '+%Y-%m-%d %H:%M:%S'`.csv"

Good luck with the rest of the exercise!

You can use mv in a for loop, like this:

for file in Domain_??????????????.csv ; do ts=`echo ${file} | cut -c8-21`; mv ${file} Domain_12345_${ts}.csv; done

Given the one file of your example, this will essentially execute this command

mv Domain_20181012230112.csv Domain_12345_20181012230112.csv

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM