Cd then mkdir from script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Cd then mkdir from script
# 8  
Old 01-09-2019
Hi,

Your additional information in post #3 is insufficient, where does $tgt come from?

A good place to start would be to post the output from chxdir.sh and the script that it is called from, this will at least allow us to see what the scripts do.

Regards

Gull04
This User Gave Thanks to gull04 For This Post:
# 9  
Old 01-09-2019
I am late into this thread, but why not walk before you can run...
As we have no idea what is in chxdir.sh nor the complete script that calls it we have to make wild guesses...
This is one way to get to change a directory on the fly from one script into another...
This is the script to be sourced, I have used the statement "source" instead of its shortcut "."...
The only proviso is you need to intitally know where both scripts are...
Code:
#!/bin/sh
# chxdir.sh
NEWDIR="$HOME"/Temp
echo "Now inside chxdir.sh..."
echo "Switching to new directory, $NEWDIR in another script..."
# Leave NEWDIR and do other stuff in here...

This is the master script...
Code:
#!/bin/sh
OLDDIR=$( pwd )
NEWDIR=$( pwd )
echo "Old directory, $OLDDIR, new directory $NEWDIR..."
echo "This is a test script..."
echo "Launching chxdir.sh..."
source "$HOME"/Desktop/Code/Shell/chxdir.sh
echo "Now back inside chdirtest.sh..."
cd "$NEWDIR"
echo "Now inside $NEWDIR, $OLDDIR unchanged..."
ls
echo "Now exiting back into the default shell and its current default directory..."

Results of the experiment using OSX 10.14.1, default bash terminal...
Code:
Last login: Wed Jan  9 12:22:30 on ttys000
AMIGA:amiga~> cd Desktop/Code/Shell
AMIGA:amiga~/Desktop/Code/Shell> chmod 755 chxdir.sh
AMIGA:amiga~/Desktop/Code/Shell> chmod 755 chdirtest.sh
AMIGA:amiga~/Desktop/Code/Shell> ./chdirtest.sh
Old directory, /Users/amiga/Desktop/Code/Shell, new directory /Users/amiga/Desktop/Code/Shell...
This is a test script...
Launching chxdir.sh...
Now inside chxdir.sh...
Switching to new directory, /Users/amiga/Temp in another script...
Now back inside chdirtest.sh...
Now inside /Users/amiga/Temp, /Users/amiga/Desktop/Code/Shell unchanged...
0000000000.BIN		dcdata.raw		squarewave.raw
1KHz-Test.sh		pulse1.wav		sweep.raw
Arduino_9600.pde	pulse2.wav		sweep.wav
FFT_WAV.py		pulsetest.sh		sweeper.raw
Untitled.m4a		sample.raw		symmetricalwave.raw
VERT_BAT.BAT		signed16bit.txt		symmetricalwave.wav
VERT_DSP.sh		sinewave.raw		waveform.raw
VERT_SOX.sh		sinewave.wav		waveform.wav
Now exiting back into the default shell and its current default directory...
AMIGA:amiga~/Desktop/Code/Shell> _

Note I have initiated "NEWDIR" on both, not necessary but useful to keep track of used variables...
Now you know that it is possible transfer 'paths' give us your two scripts so that we can peruse them properly, unless you have some ultra-secret code you don't want making public.

Last edited by wisecracker; 01-09-2019 at 09:00 AM..
# 10  
Old 01-09-2019
Quote:
Originally Posted by gull04
Hi,

Your additional information in post #3 is insufficient, where does $tgt come from?

A good place to start would be to post the output from chxdir.sh and the script that it is called from, this will at least allow us to see what the scripts do.

Regards

Gull04
See my earlier simplified script. It's where I want to cd to, then copy files into.
Code:
tgt=/b


Last edited by Neo; 01-09-2019 at 12:02 PM.. Reason: Adding code tags for someone who refused to add them.
# 11  
Old 01-09-2019
Quote:
Originally Posted by dpawson
Cd then mkdir from script

I want to change directory to a fixed base ($photos)/$mn obtained from current year month.
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:
Code:
$ 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):

Code:
$ 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):
Code:
       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:

Code:
$ 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:

Code:
$ mkdir /some
$ cd /some
$ mkdir where
$ cd where
$ mkdir subdir

you can as well write

Code:
$ 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:

Code:
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:

Code:
cd /some/where
cp /what/ever/* .

But instead you do:

Code:
cp /what/ever/* /some/where

I hope this helps.

bakunin

Last edited by bakunin; 01-09-2019 at 04:03 PM.. Reason: addendum
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Use script to mkdir based on file's data

I have a file with lines like: 111 12 7 111 13 8 112 12 9 115 31 3 120 31 9 123 10 7 125 12 I want to make a script which, split the first column into parts (101-110, 111-120...), and make directories for its part with name (101-110, 111-120...) Also i want in every directory include... (7 Replies)
Discussion started by: efsarantis
7 Replies

2. UNIX for Beginners Questions & Answers

Mkdir

hi linux expert what is a difference between: mkdir test and mkdir ./test and also if ( -e /test ) then and if ( -e ./test ) then thanks in advance Please use icode or code tags next time for your code and data (1 Reply)
Discussion started by: abdossamad2003a
1 Replies

3. Shell Programming and Scripting

Bash script: "mkdir -p" doesn't work with var(cat x)

Hello, :) I've an issue with the creation of a directory, All work without it :mad: So, below, my scripts with the debug output : #!/bin/bash # PATHS HOME_BACKUP="/home/backup" HOME_SCRIPT="/home/scripts/test/backup_server" TARGET="/var/www" # DATE DATE_Ymd=$(date +%Y-%m-%d) #... (1 Reply)
Discussion started by: Arnaudh78
1 Replies

4. UNIX for Dummies Questions & Answers

Mkdir utility

Howdy, Puttering around in unix, and read this in the mkdir man page: "The mkdir utility creates the directories named as operands..." What does this mean, i.e. as operands? Many thanks, DN (2 Replies)
Discussion started by: danuke
2 Replies

5. UNIX for Dummies Questions & Answers

Script for mkdir with permissions

Hello, I'm pretty new to scripting and trying to do a simple (well, I thought so) administrator task. I'm using bash. I want to create 10 directories under the one directory and apply permissions at the same time. I've worked out the make directories part: mkdir /userdata/folder{1..50}... (7 Replies)
Discussion started by: jimothy007
7 Replies

6. Homework & Coursework Questions

Mkdir

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Do the procedure, which if there are 5 parameters then it creates 4 directories with names of 4 parameters, in... (2 Replies)
Discussion started by: bolones
2 Replies

7. Shell Programming and Scripting

find jpg's mkdir script help

I am having a problem getting this to work right. The script needs to search through directories and subdirectories. If a jpg is found then create a folder in that directory, so on and so forth. Here is what I have so far but it doesn't work right. Help please #!/bin/bash for d in `find ./... (1 Reply)
Discussion started by: jedhypes
1 Replies

8. UNIX for Advanced & Expert Users

mkdir

Is there ant way to increase max number of folders in the directory from the 32766: Problem UFS: shell>mkdir mmm mkdir: mmm: Too many links But there are no links, just folders. shell>ls | wc -l 32766 (3 Replies)
Discussion started by: mirusnet
3 Replies

9. Shell Programming and Scripting

mkdir

Hi, I look for a script to create 150 directories : d000 d001 d002 ... ... d149 would you help me please ? I think it would be for i mkdir d$i Many thanks. PS : #uname -a AIX fserver 3 5 0050691A4C00 (2 Replies)
Discussion started by: big123456
2 Replies

10. UNIX for Dummies Questions & Answers

mkdir limitations

What characters can't be used with a mkdir? Any limits on length of name? Thank you, Randy M. Zeitman http://www.StoneRoseDesign.com (12 Replies)
Discussion started by: flignar
12 Replies
Login or Register to Ask a Question