Create a flat file and directory structure


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Create a flat file and directory structure
# 1  
Old 02-20-2013
Create a flat file and directory structure

Hi All,

is there any work around to generate the file and directory structure like below at left side at Output? and exclude all file except .abc .txt

Current Directory structure

Code:
|-------------files
|---------------Share
|-----------------dir1
|-----------------dir2
|-----------------dir3
|-----------------dir4
|-----------------dir5
|-----------------dir6
|-----------------dir7
|-----------------dir8
|-------------------IMG
|---------------------IMG001
|---------------------IMG002
|-----------------------1234.abc
|-----------------------abcd.txt
|-------------------00001
|---------------------IMG
|-----------------------IMG1
|-----------------------IMG2
|-------------------Sample
|---------------------hello
|-----------------------prod
|-------------------------NAD
|---------------------------NAT
|-------------------------TEXT
|---------------------------TEXTILE1
|---------------------00002
|-----------------------IMAG
|-------------------------IMAG1
|-------------------------IMAG2
|-----------------dir9
|-----------------dir10
|-----------------dir11

print Output file look like this

Code:
1 files    
1.1 Share
1.1.1 dir1
1.1.2 dir2    
1.1.3 dir3
1.1.4 dir4
1.1.5 dir5
1.1.6 dir6
1.1.7 dir7
1.1.8 dir8
1.1.8.1 IMG
1.1.8.1.1 IMG001    
1.1.8.1.2 IMG002    
1.1.8.1.2.1 1234.abc        
1.1.8.1.2.2 abcd.txt    
1.1.8.2 00001            
1.1.8.2.1 IMG                
1.1.8.2.1.1    IMG1            
1.1.8.2.1.2    IMG2            
1.1.8.3    Sample                
1.1.8.3.1 hello                
1.1.8.3.1.1    prod            
1.1.8.3.1.1.1 NAD            
1.1.8.3.1.1.1.1 NAT            
1.1.8.3.1.1.1.2    TEXT        
1.1.8.3.1.1.2.2.1 TEXTILE1    
1.1.8.3.2 00002                
1.1.8.3.2.1 IMAG            
1.1.8.3.2.1.1 IMAG1        
1.1.8.3.2.1.2 IMAG2        
1.1.9 dir9                
1.1.10 dir10            
1.1.11 dir11

Thank you

Last edited by heros; 02-20-2013 at 10:08 PM..
# 2  
Old 02-20-2013
Is this a one-time or re-occuring task? If is just a one time job, it is easier to just create the directories manually than writing a script for parsing this input file.
The -p switch of mkdir might come handy when creating the directories.
# 3  
Old 02-20-2013
My apologies, I mean File and Directory Structure is my current structure directory, but i want to generate a full path of file and directory structure and print to a file, not to create a directory

thanks for response

---------- Post updated 02-21-13 at 10:19 AM ---------- Previous update was 02-20-13 at 06:43 PM ----------

is this possible for unix?
# 4  
Old 02-21-2013
This comes close, only issue is unix sorts alphabetically so order is
dir1
dir11
dir12
dir2

Code:
find ./files \( -type d -o -name "*.abc" -o -name "*.txt" \) -print | awk '
function ppath(p, f, c) {
   s=index(f, "/");
   if (!p) return ppath(substr(f,1,s-1), substr(f,s+1), "");
   if (!s) pf=p"/"f;
   else pf=p"/"substr(f,1,s-1);
   if (!(pf in found)) {
      found[p]++;
      found[pf]=0
   }
   if (!s) return (c?c".":"") found[p] " " f
   return ppath(pf, substr(f, s+1), (c?c".":"") found[p])
}
{ print ppath("", $0, "") }


output:

Code:
1 files
1.1 Share
1.1.1 dir1
1.1.2 dir10
1.1.3 dir11
1.1.4 dir2
1.1.5 dir3
1.1.6 dir4
1.1.7 dir5
1.1.8 dir6
1.1.9 dir7
1.1.10 dir8
1.1.10.1 00001
1.1.10.1.1 IMG
1.1.10.1.1.1 IMG1
1.1.10.1.1.2 IMG2
1.1.10.2 IMG
1.1.10.2.1 IMG001
1.1.10.2.2 IMG002
1.1.10.2.2.1 1234.abc
1.1.10.2.2.2 abcd.txt
1.1.10.3 Sample
1.1.10.3.1 00002
1.1.10.3.1.1 IMAG
1.1.10.3.1.1.1 IMAG1
1.1.10.3.1.1.2 IMAG2
1.1.10.3.2 hello
1.1.10.3.2.1 prod
1.1.10.3.2.1.1 NAD
1.1.10.3.2.1.1.1 NAT
1.1.10.3.2.1.2 TEXT
1.1.10.3.2.1.2.1 TEXTILE1
1.1.11 dir9

---------- Post updated at 02:49 PM ---------- Previous update was at 01:49 PM ----------

Another solution without recursion:

Code:
find ./files \( -type d -o -name "*.abc" -o -name "*.txt" \) -print | awk '{
  c=split($0,v,"/");
  f=v[1];
  for(i=2;i<=c;i++)  {
      if(!(f in P)) P[f]=0;
      if(!(f"/"v[i] in P)) P[f]++;
      P[f"/"v[i]];
      printf "%s",P[f] (i<c?".":"")
      f=f"/"v[i]
  }
  print " " v[i-1];
}'


Last edited by Chubler_XL; 02-21-2013 at 12:50 AM.. Reason: Optimised
# 5  
Old 02-21-2013
very appreciate the scripts, sir could you please explain a little bit more whats going on of your script?

thank again.
# 6  
Old 02-21-2013
The find statement produces a list of files and directories that match the criteria (directory or name ends in .txt or .abc) something like this:

Code:
./files
./files/Share
./files/Share/dir1
./files/Share/dir10
...etc

Each directory component is broken out and put into a array (found[] in first script and v[] in second)
Each element in the array counts how many children sit below it
Code:
v[.]=1
v[./files]=1
v[./files/Share]=11
v[./files/Share/dir8]=3
...

Now if a new directory or file ./files/Share/dirX is processed the count in v[./files/Share] will be incremented to 12 because no entry exists for v[./files/Share/dirX] this allows the output of 1.12.1 dirX to be printed.
# 7  
Old 02-21-2013
Thank so much for your help sir.

---------- Post updated 02-22-13 at 09:11 AM ---------- Previous update was 02-21-13 at 02:15 PM ----------

Sir have a question, what about exclude some folder and their succeeding sub directory, I tried to add something like this:

Code:
\( -type d -o -name "*.dat" -o -name "*.txt" -o ! -name "warcraft" \)

is not working, is there any work around?

need to exclude directory and their succeeding subdirectory.

Thanks

Last edited by heros; 02-22-2013 at 01:47 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. OS X (Apple)

Create a bash array from a flat file of whitespaces only.

Hi guys and gals... MacBook Pro. OSX 10.13.2, default bash terminal. I have a flat file 1920 bytes in size of whitespaces only. I need to put every single whitespace character into a bash array cell. Below are two methods that work, but both are seriously ugly. The first one requires that I... (7 Replies)
Discussion started by: wisecracker
7 Replies

2. Shell Programming and Scripting

Create Directory structure

Hello ; ) again Now I have my file like this : DIR2/DIR3 DIR2 DIR2/DIR3/DIR4/DIR5 I am looking for help to create a loop that will create the directory structure. I need something like this : If "DIR2" does not exist > Create IF "DIR2" exist already > check if onther "DIR"... (5 Replies)
Discussion started by: Aswex
5 Replies

3. Shell Programming and Scripting

Rename last directory in a file structure

I have to write a script to rename the every last sub-directory in a directory structure if the last sub-directory name doesn't contain "submitted". eg: given directory path:/u01/home/somedir somedir can have many subdirectories and each subdirectory inturn has many subdirectories. somedir... (3 Replies)
Discussion started by: ramse8pc
3 Replies

4. Shell Programming and Scripting

How we can create the master file through shell to show the tree structure of the directory?

Can we create the master file that show the whole tree structure of the directory till a particular folder? Database that contains four sub repository Sybase,sql,oracle,mysql and sql and oracle contains two subrepostories Siebel and plsql and each repositories contains three folders... (1 Reply)
Discussion started by: rohit22hamirpur
1 Replies

5. UNIX for Dummies Questions & Answers

find mv and create directory structure

Hi there, I'm trying to pull all my flacs out of my Music collection. I can do it with following command find b/ -name *.flac -exec mv {} flac/ \; which works great except it moves all the flac files to the flac folder. I want it to recreate the original folder the flacs were found in and mv... (8 Replies)
Discussion started by: fistikuffs
8 Replies

6. UNIX for Dummies Questions & Answers

create tar archive without preserving directory structure?

I am adding some individual files to a tar archive and would like them to be added to the archive without any directory hierarchy, even though the files themselves exist in levels of hierarchy. Unfortunately, tar seems to always preserve the directory hierarchy when it adds the files. Here is... (2 Replies)
Discussion started by: Special_K
2 Replies

7. Shell Programming and Scripting

How to create a directory structure with getting input from a file.

Hi How to create a directory structure with getting input from a file. I have file in that following lines are written. ./activemq-4.1.2/activemq-core-4.1.2.jar ./activemq-4.1.2/backport-util-concurrent-2.1.jar ./camel-1.4.0/apache-camel-1.4.0.jar ./camel-1.4.0/lib/activation-1.1.jar... (12 Replies)
Discussion started by: itsjoy2u
12 Replies

8. Programming

compare XML/flat file with UNIX file system structure

Before i start doing something, I wanted to know whether the approach to compare XML file with UNIX file system structure. I have a pre-configured file(contains a list of paths to executables) and i need to check against the UNIX directory structure. what are the various approches should i use ? I... (6 Replies)
Discussion started by: shafi2all
6 Replies

9. Shell Programming and Scripting

Help to Create this file format structure

This data comes form the table and exported into the file in this format File1 Format weboffercode1,sourcecode1,1,1,1,1,1,1 weboffercode1,sourcecode2,1,1,1,1,1,1 weboffercode1,sourcecode1,1,1,1,1,1,1 weboffercode1,sourcecode3,1,1,1,1,1,1 weboffercode1,sourcecode3,1,1,1,1,1,1 ... (4 Replies)
Discussion started by: enigma_83
4 Replies

10. UNIX for Advanced & Expert Users

MV files from one directory structure(multiple level) to other directory structure

Hi, I am trying to write a script that will move all the files from source directory structure(multiple levels might exist) to destination directory structure. If a sub folder is source doesnot exist in destination then I have to skip and goto next level. I also need to delete the files in... (4 Replies)
Discussion started by: srmadab
4 Replies
Login or Register to Ask a Question