[SOLVED] Clueless on how to remove spaces from all .jpg's beneath a folder
Linux - NewbieThis 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
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 ran it with the echo and the 2nd half of the mv still has the spaces removed from the folder names so i'm assuming it will fail if i remove the echo.
I ran it with the echo and the 2nd half of the mv still has the spaces removed from the folder names so i'm assuming it will fail if i remove the echo.
Oops! Mea culpa! Of course it does. Maybe switch to my method of calling a script from find, but using this updated script
Code:
#!/bin/bash
for file in "$@"
do
dir="${file%/*}/"
name="${file#$dir}"
newname="${name// /}"
if [[ "$newname" != "$name" ]]; then
echo mv "$file" "${dir}$newname"
fi
done
Yes. It just needed some retouching, so it would strip the spaces from the file name, but not the path.
Code:
oldfile=$(basename "$file")
basename returns the file name only, so "basename /path/to/file.jpg" would return "file.jpg". That base name is stored in $oldfile.
Code:
newfile="${oldfile// /}"
This is the same I did originally, I remove the blanks from $oldfile and store the result into $newfile.
Code:
echo mv "$file" "${file%$oldfile}$newfile"
There you have a new operator, ${file%$oldfile} cuts the first occurrence of the substring $oldfile inside $file starting from the right. So the result would be the path without the old filename. Finally I add $newfile to that path, obtaining the wanted result.
find . -type f -name '* *'.[jJ][pP][gG] | while read file; do mv "$file" "${file// /}"; done
# or
find . -type f -name '* *'.[jJ][pP][gG] | while read file; do mv "$file" "${file//_/}"; done
The last example you had with the underscore did not work.
This worked for me to replace the spaces with underscores
Code:
find . -type f -name '* *'.[jJ][pP][gG] | while read file; do mv "$file" "${file// /_}"; done
I'd rather convert this into a script and put it under one of the /etc/cron.*/ directories depending on the frequency, and yes, you will need to use fully qualified paths.
Well, none, I guess It's just a matter of cleanliness and personal preference.
I guess each person puts the limit according to his/her own personal tastes. I prefer to keep crontab readable, if I need to write something that's more than a simple command, I rather write a script and either add it to the crontab or put it into /etc/crond.*/. But besides that, as long as the syntax allows it, you can use whatever fits you better.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.