Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm trying to write this shell script to create in the parent directory a copy of the folders found in the current directory. So far, I wrote this:

for folder in *; do

    mkdir ../$folder;
done

I'd like to do a "find and replace" operation on the folder name, so that, for instance, folder named graphics-HD becomes copied as graphics-SD

Sorry if it's simplistic, but I am absolutely not experienced with shell script / unix.

Thanks a lot! J.

share|improve this question
1  
Can you edit and add more details about the find and replace operations you want to cover (unless the answer below covers them all) –  Paul Nov 21 '12 at 11:46
add comment

2 Answers

up vote 2 down vote accepted

Adding a trailing slash to the wildcard restricts the output to directories

for dir in */; do ...

You'll want to read about bash parameter expansion -- you can do find and replace within the shell:

newname=${dir/%-HD/-SD}
share|improve this answer
    
What is the percent sign for? –  Ярослав Рахматуллин Nov 21 '12 at 13:14
    
See the documentation linked in my answer: If pattern begins with ‘%’, it must match at the end of the expanded value of parameter. –  glenn jackman Nov 21 '12 at 14:54
add comment

there is nothing wrong with what you have, except it will make folders out of files as well as folders. You can either check that every folder is a directory with [ -d $folder ], or use find. From the folder where you have folders that you wish to copy:

find -type d -maxdepth 1 -exec mkdir "../{}" \+ 

To search and replace, there is rename from rename.berlios.de. you can rename all folders somewhere like this:

renamexm -s/-HD/-SD/ `find . -type d -maxdepth 1`
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.