Recursive file organization?


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Recursive file organization?
# 1  
Old 04-12-2012
Recursive file organization?

Does anyone have any idea of how I can make something like the code below run recursively?

I'll run it on a tree of directories all with different names and all containing a sequence of .dpx files. I've tried to do it using find and exec but can't get it to work right.

What it needs to do is find .dpx files in any sub-directory and move them into a new directory called 2880x1640, in their current directory.

.../xyz_XXX_XXX/xyz_XXX_XXX.00000.dpx needs to become
.../xyz_XXX_XXX/2880x1640/xyz_XXX_XXX.00000.dpx

The file and it's parent directory are named identically, if that makes any difference.

It'll run in a bash shell.

Code:
for f in "$@"
do
mkdir $f/2880x1640
mv $f/*.dpx $f/2880x1640
done

# 2  
Old 04-12-2012
Off the top of my head (so there might be better solutions)...

Assuming that the current working directory is the root of the portion of the file tree that you wish to parse, here are two possibilities. The first, I believe, is more efficient, but isn't bash friendly (ksh only). The second should run in either bash or ksh. Run to see what it would create/move and then remove the 'echo' to actually do the work.

Code:
#!/usr/bin/env ksh 
# ksh only!


typeset -A dhash
find . -name "*.dpx"| while read f
do
    path=${f%/*}
    if [[ -z ${dhash[$path/]} ]]
    then
        echo "mkdir $path/2880x1640"
        dhash[$path/]=1;
    fi
    echo mv $f $path/2880x1640/
done



Code:
# not efficient as it has to stat the target directory for every file, but works in bash. 
find . -name "*.dpx"| while read f
do
    path=${f%/*}
    if [[ ! -d  $path/2880x1640 ]]
    then
        echo "mkdir $path/2880x1640"
    fi
    echo mv $f $path/2880x1640/
done

# 3  
Old 04-13-2012
Yes! The they both work great, except they continue to move files that are already moved ... xxxx/2880x1640/2880x1640/ ...

This is a bad thing. I need some way of preventing this from happening.
My original code searched for the directory name ???_???_v* and then executed on that, that way it would just fail if there was already a 2880x1640 directory.

Thanks again for the code!
# 4  
Old 04-13-2012
Oops, hadn't considered a rerun, or that there might be files already in the directory. Something like this would prevent it from trying to move files that had been moved:

Code:
find . -name "*.dpx"| while read f
do
    path=${f%/*}
    if [[ $path != *"2880x1640"* ]]  # skip if file is already below a 2880x directory
    then
        if [[ ! -d  $path/2880x1640 ]]
        then
            "mkdir $path/2880x1640"
        fi
        mv $f $path/2880x1640/
    fi
done



You can apply the same technique to the other script if you went with that one.
# 5  
Old 04-13-2012
That rocks! Works perfectly!
Thanks!
 
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Recursive delete in a file using a set of values in other file

Hi, I have got a file with 6K records and I want to delete 500 records from this file which match the values present in another file. Format of the both the files is different. Example : File 1 record CCCCCC 11292562ABCDEF MBR/PSF6/108100502/BEN01XXX XXX Example : File 2 record... (1 Reply)
Discussion started by: Nikhath
1 Replies

2. Shell Programming and Scripting

Recursive file processing from a path and printing output in a file

Hi All, The script below read the path and searches for the directories/subdirectories and for the files. If files are found in the sub directories then read the content of the all files and put the content in csv(comma delimted) format and the call the write to xml function to write the std... (1 Reply)
Discussion started by: Optimus81
1 Replies

3. Shell Programming and Scripting

Help with re-organization data

Input file DATA2.2 POSITION_152486.2 COLUMN689699.2 DATA2.2 ROW00000342066 UNIT00000342313 DATA7.2 POSITION_017891.4 COLUMN060361.4 DATA7.2 ROW00000379319 UNIT00000368623 DATA7.2 ROW00000421241 UNIT00000400736 DATA8.1 POSITION_153254.2 COLUMN694986.2 DATA8.1 ROW00000379288... (1 Reply)
Discussion started by: perl_beginner
1 Replies

4. Shell Programming and Scripting

mail outside organization

Hi All, Through mailx command, we are able to send mail to all users within the organization but not outside the organization. I need to work with Admin to configure it. Can someone tell me on what are the things needs be done to enable it. i have checked the resolv.conf, it shows only... (1 Reply)
Discussion started by: ace_friends22
1 Replies

5. IP Networking

Using 'whois' to Retrieve all IPs/Subnets for an Organization

I manage a spam filter for the organization I work for. I've been trying to get the others here to stop white listing by domain name since that can be easily spoofed. One of the obstacles, however, is that there doesn't seem to be an easy way to determine the legitimate outgoing SMTP server IP... (0 Replies)
Discussion started by: deckard
0 Replies

6. UNIX for Dummies Questions & Answers

File organization, /bin and /src

The /src file is obviously designed to contain source code, so when I download programs, I should put them in /src (because they contain the source files + the executables)? What do most people do with the executables? Do they copy them to /bin, make links to them in /bin, or just leave them in... (4 Replies)
Discussion started by: css136
4 Replies

7. UNIX for Dummies Questions & Answers

Theory question about the organization of a UNIX file...

Hi, I am quite sure that I am posting a question in the very wrong forum but I have to give a try. It's a question about UNIX theory. I don't have any clue of how to solve this question. If someone could kindly provide some good references or give me the formulas, it will be really... (1 Reply)
Discussion started by: ti_ma
1 Replies

8. Filesystems, Disks and Memory

Recursive file processing

I'm developing a generic script to catenate all files found in a given directory. The problem I've got is that the depth of the given directory is unknown, so I end up with some catenated directories. My unix isn't that hot and I'm at a loss. Heres an extract from the script cd $1 for i in... (4 Replies)
Discussion started by: k_mufasa
4 Replies

9. AIX

Organization in a big file system

hello I have a file system with 737 Go of data (oracle) I want to add 230 Go. IBM technician says to me that it's better (for performance) to backup the file system, rebuild it with the new 250Go and restore it.... 737 Go to backup, it is not very simple... !!!! You confirm what says the... (6 Replies)
Discussion started by: pascalbout
6 Replies
Login or Register to Ask a Question