简体   繁体   中英

How to rename all files in a folder removing everything after space character in linux?

Hello I can't use well the regular expressions it's all day I'm searching on Internet. I have a folder with many pictures:

  • 50912000 Bicchiere.jpg
  • 50913714 Sottobottiglia Bernini.jpg

I'm using Mac OS X, but I can also try on a Ubuntu, I would like to make a script for bash to remove all the characters after the first space to have a solution like this:

  • 50912000.jpg
  • 50913714.jpg

For all the files in the folder. Any help is appreciated. Regards

Use pure BASH:

f='50912000 Bicchiere.jpg'
mv "$f" "${f/ *./.}"

Or using find fix all the files at once:

find . -type f -name "* *" -exec bash -c 'f="$1"; s="${f/_ / }"; mv -- "$f" "${s/ *./.}"' _ '{}' \;

Use sed,

sed 's/ .*\./\./g'

Notice the space before .*

You can use a combination of find and a small script.

prompt> find . -name "* *" -exec move_it {} \;
mv "./50912000 Bicchiere.jpg" ./50912000
mv "./50913714 Sottobottiglia Bernini.jpg" ./50913714
prompt> cat move_it
#!/bin/sh

dst=`echo $1 | cut -c 1-10`

# remove the echo in the line below to actually rename the file

echo mv '"'$1'"' $dst

重命名

rename 's/.*\s+//' *files

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM