Bash to check directory and create missing folder from file


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 15  
The below shows that the $STRING variable has all the reords in it and $folder contains 00-1111-xxx-xxx and 00-2222-yyy-yy, but no directory is created for 00-3333-zz-zz/variants. Since 00-3333-zz-zz is in $STRING but not in $folder, 00-3333-zz-zz/variants is used by mkdir -p

I also included what I think the awk line is doing, is it correct? Thank you Smilie.

Code:
+ for RDIR in '"$DIR"/R_2019*'
+ S5=R_2019_00_00_00_00_00_xxxx_x0-00000-123-v5.6_xxx_xxx_xxx_xxx_xxx_xxx_xxxx
+ TRIMSTR=/home/cmccabe/Desktop/new/R_2019_00_00_00_00_00_xxxx_x0-00000-123
+ mv /home/cmccabe/Desktop/new/R_2019_00_00_00_00_00_xxxx_x0-00000-123-v5.6_xxx_xxx_xxx_xxx_xxx_xxx_xxxx /home/cmccabe/Desktop/new/R_2019_00_00_00_00_00_xxxx_x0-00000-123
+ cd /home/cmccabe/Desktop/new/R_2019_00_00_00_00_00_xxxx_x0-00000-123
++ awk -F '\n' -v RS= -v ref=R_2019_00_00_00_00_00_xxxx_x0-00000-123-v5.6_xxx_xxx_xxx_xxx_xxx_xxx_xxxx '$0 ~ ref {d=split($0, val, " "); for(i=2;i<d;i+=2) printf "%s ",val[i]; printf "\n"}' /home/cmccabe/Desktop/new/all
+ STRING='00-3333-zz-zz 00-1111-xxx-xxx 00-2222-yyy-yy '
+ for folder in '*[0-9]*/'
+ folder=00-1111-xxx-xxx
+ [[  00-3333-zz-zz 00-1111-xxx-xxx 00-2222-yyy-yy   == *\ 00-1111-xxx-xxx\ * ]]
+ for folder in '*[0-9]*/'
+ folder=00-2222-yyy-yy
+ [[  00-3333-zz-zz 00-1111-xxx-xxx 00-2222-yyy-yy   == *\ 00-2222-yyy-yy\ * ]]

Code:
STRING=$(awk -F '\n' -v RS="" -v ref="$S5" '$0 ~ ref {d=split($0, val, " "); for(i=2;i<d;i+=2) printf "%s ",val[i]; printf "\n"}' "$DIR"/f1)
use each newline as a seperator and then a space for each record. look for the $S5 variable in f1 and once found, loop through $2 printing them using val and storing them in $STRING seperated by a space


Last edited by cmccabe; 10-04-2019 at 02:45 PM.. Reason: added details
# 16  
Awk code uses blank line as record separator and new line as field separator. matching record that contains ref and then each field (line if record) is split and the 2nd word printed with spaces.

I thought you wanted to create create variants if a folder existed that wasn't in the STRING variable.

for matching from STRING and looking for folders you would need this:

Code:
for folder in $STRING
do
    ## if $folder does not exist then make $folder/variants
    [ -d "$folder" ] || mkdir -p "$folder"/variants
done

This User Gave Thanks to Chubler_XL For This Post:
# 17  
Probably missing an obvious syntax error but another set of eyes will help. Thank you Smilie.

Code:
DIR=/home/cmccabe/Desktop/new
for RDIR in "$DIR"/R_2019* ; do  ## # matching "R_2019*" to operate on desired directory and expand
  S5=${RDIR##*/}  ## store run with no path as S5
  TRIMSTR=${RDIR%%-v5.6*}  ## trim folder match in RDIR from -v5.6 and store in TRIMSTR
    mv "$RDIR" "$TRIMSTR"  ## move trimmed folder to directory
  cd "$TRIMSTR"
      STRING=$(awk -F '\n' -v RS="" -v ref="$S5" '$0 ~ ref {d=split($0, val, " "); for(i=2;i<d;i+=2) printf "%s ",val[i]; printf "\n"}' "$DIR"/f1)
  for folder in *[0-9]*/ ; do
      folder=${folder%/}   ## remove trailing slash
      if ! [[ " ${STRING/[*]} " == *\ $folder\ * ]]
      then
           for folder in $STRING ; do
           ## if $folder does not exist then make
           [ -d "$folder" ]
             mkdir -p "$TRIMSTR"/"$folder"/variants
             break
          end
      fi
     done
   done
done

Code:
bash: syntax error near unexpected token `fi'
cmccabe@xxx:~$      done
bash: syntax error near unexpected token `done'
cmccabe@xxx:~$    done
bash: syntax error near unexpected token `done'
cmccabe@xxx:~$ done

# 18  
Hi,

The test for the directory [ -d "$folder" ] should be treated as the open of an if statement - you need to close it.

Regards

Gull04
This User Gave Thanks to gull04 For This Post:
# 19  
This intent was to replace the original for loop like this:

Code:
DIR=/home/cmccabe/Desktop/new
for RDIR in "$DIR"/R_2019* ; do  ## # matching "R_2019*" to operate on desired directory and expand
  S5=${RDIR##*/}  ## store run with no path as S5
  TRIMSTR=${RDIR%%-v5.6*}  ## trim folder match in RDIR from -v5.6 and store in TRIMSTR
  mv "$RDIR" "$TRIMSTR"  ## move trimmed folder to directory
  cd "$TRIMSTR"
  STRING=$(
      awk -F '\n' -v RS="" -v ref="$S5" '$0 ~ ref {d=split($0, val, " "); for(i=2;i<d;i+=2) 
          printf "%s ",val[i]; printf "\n"}' "$DIR"/f1 )
  for folder in $STRING
  do
      ## if $folder does not exist then make $folder/variants
      [ -d "$folder" ] || mkdir -p "$folder"/variants
  done
done

This User Gave Thanks to Chubler_XL For This Post:
# 20  
Thank you all Smilie
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #12
Difficulty: Easy
CPU stands for 'Computer Processing Unit' and controls all of a computer's functions, acting as the brain(s) of computers.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Create directory and sub-directory with awk and bash

In the below I am trying to create a parent directory using the R_2019 line from f1 if what above it is not empty. I then create sub-directories under each parent if there is a match between $2 of f1 and $2. Inside each sub-folder the matching paths in $3 and $4 in f2are printed. If there is no... (2 Replies)
Discussion started by: cmccabe
2 Replies

2. Shell Programming and Scripting

Create automated scan of specific directory using bash

I am trying to use bash to automate the scan of a specific directory using clamav. Having this in place is a network requirement. The below is an attempt to: 1. count the extensions (.txt, .jpeg) in a directory and write them to a virus-scan.log (section in bold) 2. scan each folder in the... (6 Replies)
Discussion started by: cmccabe
6 Replies

3. Shell Programming and Scripting

Bash to select oldest folder in directory and write to log

In the bash below the oldest folder in a directory is selected. If there are 3folders in the directory /home/cmccabe/Desktop/NGS/test and nothing is done to them (ie. no files deleted, renamed) then the bash correctly identifies f1 as the oldest. However, if something is done to the folder then... (4 Replies)
Discussion started by: cmccabe
4 Replies

4. Shell Programming and Scripting

Bash to add folder to exsisting folders in directory

I am trying to create subdirectories in each folder in /home/cmccabe/Desktop/NGS/test/*. When I use echo I can see each folder in the directory, but I can not seem to add the commented out portion in bold. These are the sub-directories and sub-folders I am trying to add to each folder in... (1 Reply)
Discussion started by: cmccabe
1 Replies

5. Shell Programming and Scripting

Bash to select oldest folder in directory automatically and log process

The `bash` below uses the oldest folder in the specified directory and logs it. The goes though an analysis process and creates a log. My problem is that if there are 3 folders in the directory folder1,folder2,folder3, the bash is using folder2 for the analysis eventhough folder1 is the oldest... (0 Replies)
Discussion started by: cmccabe
0 Replies

6. Shell Programming and Scripting

Create a folder under different user directory

Hello All, I have to write a shell script and use it in informatica. The script has to perform below actions: The script gets executed from edw user. Through the script, a DT folder has to be created under edw_sca user. Is this scenario possible through a SHELL script or not. ... (2 Replies)
Discussion started by: bghosh
2 Replies

7. Shell Programming and Scripting

how to check if a directory exists or not.if not need to create it

Hi, I am using solaris 10 OS and bash shell.just checking for small code snippet which follows below. /export/home/vomappservers/spa/common/5.0 /export/home/vomappservers/spa/common/scripts /export/home/vomappservers/spa/tools /export/home/vomappservers/spa/scm5.0/SCCS... (5 Replies)
Discussion started by: muraliinfy04
5 Replies

8. Shell Programming and Scripting

check if multiple directories exist else create missing directories

Hi , I 'm trying to check if multiple directories exist on a server, if not create the missing ones and print " creating missing directory. how to write this in a simple script, I have made my code complex if ; then taskStatus="Schema extract directory exists, checking if SQL,Count and... (7 Replies)
Discussion started by: ramky79
7 Replies

9. Shell Programming and Scripting

To check whether a directory is exist and if it is not, create it

Hi, I want to write a shell script to check whether a directory (say A) is existing in a given location and if it is not, create it. (3 Replies)
Discussion started by: sabya
3 Replies

10. Shell Programming and Scripting

Use awk to create new folder in current directory

Alright, I am sure this is a laughable question, but I don't know so I am going to ask anyway. I have a little script I am writing to take information from one source, recode it in a certain way, and print to files for each subject I have data for. This all works perfectly. I just want to put... (6 Replies)
Discussion started by: ccox85
6 Replies

Featured Tech Videos