Wednesday, November 30, 2011

Renaming directories and files

Supposed you have the following directory structure:

/home/user/files/A/
/home/user/files/A/1/
/home/user/files/A/2/
/home/user/files/A/3/
/home/user/files/B/
/home/user/files/B/37/
/home/user/files/B/38/
/home/user/files/B/39/

and you wish to concatenate the subdirectories to the parent directories (ex: "A - 1", "A - 2", "B - 38"), to result in the following structure:

/home/user/files/A - 1/
/home/user/files/A - 2/
/home/user/files/A - 3/
/home/user/files/B - 37/
/home/user/files/B - 38/
/home/user/files/B - 39/


First,
cd /home/user/files

Next, allow spaces in file names:
IFS=$(echo -en "\n\b")

Then:
for dir in `ls`; do cd "$dir"; for files in `ls`; do mv "$files" "$dir - $files"; mv "$dir - $files" .. ; done; cd .. ; echo "rm -Rf $dir" >> /tmp/cleanup.sh ; done

Take a look at the generated cleanup file:
cat /tmp/cleanup.sh

If it looks ok, make it executable:
chmod u+x /tmp/cleanup.sh

and execute it:
/tmp/cleanup.sh