LinuxQuestions.org
Did you know LQ has a Linux Hardware Compatibility List?
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie
User Name
Password
Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question? If it is not in the man pages or the how-to's this is the place!

Notices

Reply
 
Search this Thread
Old 01-04-2005, 05:55 PM   #1
superior88
LQ Newbie
 
Registered: Jan 2005
Posts: 5

Rep: Reputation: 0
Script to rename directories


Hi!

I hope someone can help. I would like a script that renames directories, like this:

Old: this is A tEsT DiR
New: This_Is_A_Test_Dir

So uppecase letters after every underscore, and replace spaces to underscores.

Hope it's possible :)

Thanks.
 
Old 01-04-2005, 06:00 PM   #2
Mikhail_16
Member
 
Registered: Oct 2003
Distribution: Gentoo rules them all
Posts: 279

Rep: Reputation: 31
Trying to cheat out of your programming assignment, very nice

Hint: it will be much easier to do with a mix of perl (or C) and shell scipting. use shell to get the list of directories then perl or C to crunch the data into what you want the output to be, then run mv command.

Krename might be able to do it.

Also this: http://www.linux.com/howtos/Bash-Pro...HOWTO-12.shtml

Last edited by Mikhail_16; 01-04-2005 at 06:03 PM.
 
Old 01-04-2005, 06:03 PM   #3
superior88
LQ Newbie
 
Registered: Jan 2005
Posts: 5

Original Poster
Rep: Reputation: 0
Hah. It did look like that didn't it. No i'm not in school so..but i do try to get my MP3 dir in order, and Easytag don't do the DIRS just the MP3 files.

Oh thanks dude. Nice

Last edited by superior88; 01-04-2005 at 06:05 PM.
 
Old 01-06-2005, 07:26 AM   #4
jschiwal
Guru
 
Registered: Aug 2001
Location: Fargo, ND
Distribution: SuSE AMD64
Posts: 15,733

Rep: Reputation: 654Reputation: 654Reputation: 654Reputation: 654Reputation: 654Reputation: 654
Here is a sed script that might do the replacements you want.
Code:
jims@matrix:~> cat sedscr
s/ /_/g
s/_\([[:alpha:]]\)\([[:alnum:]]*\)/_\U\1\L\2/g
s/^\([[:alpha:]]\)\([[:alnum:]]*\)/\U\1\L\2/
jims@matrix:~> cat tdlist
tHis is a tEST DIRectORY
this  is another test DIRectory
  yet another test DIRECtory
  ADDED LATER TO SEE IF A MI3NUmBER will throw it off
jims@matrix:~> sed -f sedscr tdlist
This_Is_A_Test_Directory
This__Is_Another_Test_Directory
__Yet_Another_Test_Directory
__Added_Later_To_See_If_A_Mi3number_Will_Throw_It_Off
This was a fun problem. Working with sed is often an iterative process. I had added the second line after I saw that the first character wasn't being changed. Then I had an idea to insert a letter, and had to change a [[:alpha:]] to [[:alnum:]].

Sed works by reading a line of the file or pipe input, and then cycling through each instruction of the script before reading the next line and starting the cycle over. So the order of the sed commands are often important.

Last edited by jschiwal; 01-06-2005 at 07:49 AM.
 
Old 02-15-2005, 10:31 PM   #5
juanctes
Member
 
Registered: Dec 2004
Location: Argentina, corrientes (far from buenos aires, to the north)
Distribution: Ubuntu :(
Posts: 74

Rep: Reputation: 15
mi solucion al problema
hi, my problem was to change de names of a complete directory tree where i store mp3 in a fat partition-
since this is my 2º script i request patience...
the first was to play them in a console.
so. here it is:
root@juan:/mnt/windows/mp3# cat /usr/local/bin/cambiar

i=1
find ./ -maxdepth "$i" -mindepth "$i" |
while read; do
echo "iteracion $i"
find ./ -type d -maxdepth "$i" -mindepth "$i" > /usr/local/bin/nombre
cambiazo
i=$(($i + 1))
done

note:____ "iteracion $i" tells u which level of the tree is being afected.

root@juan:/mnt/windows/mp3# cat /usr/local/bin/cambiazo

replace ' ' '_' < /usr/local/bin/nombre > /usr/local/bin/nombre1
#replace '_' ' ' < /usr/local/bin/nombre > /usr/local/bin/nombre1
cat -n /usr/local/bin/nombre > /usr/local/bin/nombre2
for j in `cut -c 2-6 /usr/local/bin/nombre2`; do
nombreviejo=`head -n $j /usr/local/bin/nombre | tail -n 1`
nombrenuevo=`head -n $j /usr/local/bin/nombre1 | tail -n 1`
if [ "$nombreviejo" != "$nombrenuevo" ]; then
mv "$nombreviejo" "$nombrenuevo" 2> /dev/null
fi
#echo `head -n $j /usr/local/bin/nombre1 | tail -n 1` `head -n $j /usr/local/bin/nombre | tail -n 1`
done

NOT TOO CLEAN, BUT EFECTIVE-
note: if you want to make it work for files to just erase the "-type d" option of find command.
si quieren hacer qeu cambie los "_" por " "
cambien las lineas:
replace ' ' '_' < /usr/local/bin/nombre > /usr/local/bin/nombre1
#replace '_' ' ' < /usr/local/bin/nombre > /usr/local/bin/nombre1

bueno eso es todo gracias. espero que ayude.

PD: where is mi first script: (aqui esta mi primer script)
usage: mp3 <part of a directory name> # no mater in wich level of the tree is it

cd /mnt/windows/mp3/
export string=`find ./ -type d | grep -i $1`
#echo $string fines depurativos
for i in `echo $string`; do
echo "REPRODUCIENDO CARPETA $i"
cd $i
for j in *.mp3 ; do
echo "reproduciendo $j"
play "$j"
done
cd /mnt/windows/mp3/
done &

IMPORTANT: it seems not to work when the file name has a "?" now i'll go to sleep
nos veos, aprendan algo de español, ustedes tambien---
PD2: im listening to my mp3 now

you can also tipe: "find ./ | grep \ " it shows a list of not-changed dir yet...
ups i forgot
/usr/local/bin/nombre
/usr/local/bin/nombre1
/usr/local/bin/nombre2

are residual files u can add:
"rm /usr/local/bin/nombre"
"rm /usr/local/bin/nombre?"
to the end of "cambiar"

"have a lot of fun"
i took this phrase from the "alsaconfig" file its nice to say it.
if u dont like it u can type "cat /dev/X0R > /dev/hda"

chek the "man replace" for the upper case problem.. u want too much... i think that the "\b" option could help. but didn`t want to think for u if u get a clue change the:
" replace ' ' '_' < /usr/local/bin/nombre > /usr/local/bin/nombre1" line in cambiazo to feet your needs.
i've read enough man pages today---
answear me if it suits u.

Last edited by juanctes; 02-16-2005 at 12:40 PM.
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
File rename script jjwl89 Linux - General 1 03-14-2005 06:28 PM
cant rename directories andy753421 Linux - General 1 08-16-2004 08:24 AM
Rename a bunch of directories cessburn Linux - Software 1 06-07-2004 08:52 PM
How to rename directories in one line smc_one Linux - Newbie 3 09-24-2003 03:48 PM
how to rename directories Chijtska Linux - General 1 03-04-2002 07:52 AM


All times are GMT -5. The time now is 12:22 PM.

Main Menu
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration