If i put that all together correctly you have two problems:
1) obtain the directory name from the date in the form you want.
2) change into that directory or create it if it is not there.
Assuming that this is correctly stated, here are your solutions:
1) use the date
command. It wil output the current date (and time) but you can give it a "format string" which will determine in which form you want to output to be formatted. Part of this "formatting" is also the addition or removal of certain parts of the date.
To get the current date and time:
$ date
Wed Jan 9 20:36:44 CET 2019
Now, let us look at the man page of date (this should always be your first reference when trying to figure out what a command does and how it does it):
$ man date
DATE(1) User Commands DATE(1)
NAME
date - print or set the system date and time
SYNOPSIS
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
DESCRIPTION
Display the current time in the given FORMAT, or set the system date.
OK, so we have date +format
where we still have to determine what "format" should be. So, reading further in the man page, we find (among many other formats):
FORMAT controls the output. Interpreted sequences are:
[...]
%m month (01..12)
[...]
%y last two digits of year (00..99)
So let us have a try:
$ date '+%y%m'
1901
Problem 1 solved.
For the second problem: you do not need to test it! mkdir
knows the -p
option, which will create a directory, if it is not there - complete with the whole path leading up to it. Instead of:
$ mkdir /some
$ cd /some
$ mkdir where
$ cd where
$ mkdir subdir
you can as well write
$ mkdir -p /some/where/subdir
Which will create the directory /some
if it doesn't exist (if it does exist, nothing happens), the in it this directory create /some/where
if it does not exist (again, if it does nothing will happen), and so on.
So, your script could contain something like:
myroot="/some/where"
curdir="$(date '+%y%m')" # this executes "date '+%y%m'" and assings its output to variable curdir
mkdir -p "$myroot/$curdir" # make sure the directory exists.
[...] rest of your code here, using "$myroot/$curdir" as path to your files
As a general rule: never use relative pathes in scripts, always only absolute pathes. This way your scripts will always do the same to the same files and will not produce different results just because you called them from a different directory. Also, never use cd
in a script. First, you will not need it if using absolute pathes and second, you shouldn't have to change the environment for a script to use. If you want to copy files to a directory you do NOT do:
cd /some/where
cp /what/ever/* .
But instead you do:
cp /what/ever/* /some/where
I hope this helps.
bakunin