ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I'm trying to do a mass rename of files & folders in a particular directory, translating all spaces to underscores.
What I've got so far is this:
Code:
for i in `ls | grep ' '`; do newname=`echo $i | tr " " "_"`; oldname=$i; echo -e "$oldname --> $newname"; done
Once the script spits out what I want it to, the "echo" will be replaced with a "mv $oldname $newname". However, it doesn't yet. It's choking on all the spaces in the filenames, and instead of giving me the expected
Yes, but this is something that I noticed yesterday and confirmed just now - if I try to change IFS in a terminal, it screws up ls for that particular instance of the terminal.
[me@localhost~/shell_scripts]$ ls -l
total 8
-rwxr-xr-x 1 me users 1480 2004-06-27 19:52 tolower.sh*
-rwxr-xr-x 1 me users 155 2005-05-31 15:12 translate_spaces_to_underscores.sh*
[me@localhost~/shell_scripts]$ export IFS="
> "
[me@localhost~/shell_scripts]$ for i in `ls | grep ' '`; do newname=`echo $i | tr " " "_"`; oldname=$i; echo -e "$oldname --> $newname"; done
/usr/bin/ls: --color=auto -F -b -T 0: No such file or directory
[me@localhost~/shell_scripts]$ ls
/usr/bin/ls: --color=auto -F -b -T 0: No such file or directory
[me@localhost~/shell_scripts]$ export IFS=" "
[me@localhost~/shell_scripts]$ ls -l
total 8
-rwxr-xr-x 1 me users 1480 2004-06-27 19:52 tolower.sh*
-rwxr-xr-x 1 me users 155 2005-05-31 15:12 translate_spaces_to_underscores.sh*
Needless to say, ls works at any other time
Last edited by rose_bud4201; 06-01-2005 at 09:33 AM.
Distribution: Debian testing 64bit at home, EL5 32/64bit at work.
Posts: 196
Rep:
David Ross said:
Quote:
Try setting the seperator to a newline first:
IFS="
"
This is a new one for me ... and it worked like a charm! Thanks! This IFS thingy is really going to save my bacon when dealing with spaces in filenames :-)
Here's how I'm using it:
Code:
IFS="
"
for i in $(ls -1 *.part[0]1.rar)
do
echo -e "\n $i \n"
PAR=${i%%.part*}.par2
if [ -e "$PAR" ]
then
/usr/bin/par2repair "$PAR" && /usr/local/bin/rar e "$i" && mv *.avi *.mpg *.iso ../
fi
done
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.