unixrecursiongziphp-uxmv

Unix Recursively move all files but keeping the structure


I have a folder named "in" that contains several folders "a" "b" "c" and I want to move all files to thhe folder "proc" and compress them. The tricky part is the files in "in/a" have to be moved to "proc/a", "in/b" have to be moved to "proc/b" and so on I managed to find all files and zip them whit this command

find . -type f ! \( -name "*gz" -o -name "*tmp" -o -name "*xftp" \) -exec gzip -n '{}' \;

But I'm not finding a generic command to move the files that works whiteout me telling the name of the folders. Can anyone give me a hand?


Solution

  • Well I ended up finding out I had a couple more problems for example the target folder not existing so I ended up using this code

    find . -type f ! \( -name "*gz" -o -name "*tmp" -o -name "*xftp" \) -exec gzip -n '{}' \;
    find . -name "*.gz" | cpio -p -dumv $1
    if [ "$?" = "0" ]; then
        find . -name "*.gz" -exec rm -rf {} \;
    else
        echo "cpio Failed!" 1>&2
        exit 1
    fi
    

    the 1st line finds all files to be processed and zips them. the second line finds all files and copies to the target dir, in my case it was $1 (argument 1), creating as many folders as necessary to ensure the same structure. The third line checks the status of the last command if it worked it finds and removes all gz files from the source folder whiteout deleting any folder. If it didn't deletes nothing so I can analyse what happened (maybe run out of space)

    I bet there's a faster way of doing this whiteout having to use so much disk space but since that was not a problem for me it looks acceptable.