Remove spaces in file names recursively using Linux Commands

26 11 2008

Cool stuff for removing space in your file and folders names.This command will remove a whitespace and change it to underscore character “_” . Open your terminal.  Changes path to your working folders. Caution, this command will affect all of your files and folders recursively. Then do this command :

a. Remove spaces in current folders:
user@machine~>rename -v 's/\ /\_/g' *

b. Remove spaces in all files and one sub folder:
user@machine~>rename -v 's/\ /\_/g' */*

note:
*        -> in current folders only (ex : folder1)
*/*        -> in current and sub folders (ex: folder1/folder2)
*/*/*    -> in current, sub folders, sub folders (ex: folder1/folder2/folder3)

Just simply changes */* with your folder depth needs.


Tindakan

Information

5 tanggapan

26 11 2008
Ichan

Maksud dari ini apa bos,. >> -v ‘s/\ /\_/g’ *
-v = ?
‘s/\/\_/g’= ?

23 06 2010
zona90

Why are you so lazy to type “man” in your console mamen… ^_!

v, --verbose
Verbose: print names of files successfully renamed.

in rename commands the matching and rename pattern are separated by forward slash ( / ) sign.

's/\ /\_/g', just simple perl expression, it can said something likes :
"found just one (s) space character (/\ ) and ( / ) replace it with underscore (\_)
/g modifiers means -> rename every space in the files or folder names into underscore.

22 06 2010
Conor

This is an incredibly useful post, and I thank you for taking the time. I’ve been using rename to remove whitespace for quite some time, but in a script I’m writing now I’d like to be able to do it recursively. I do not want to have to manually specify the depth of the directory trees, because I don’t want to expect the user to know it!

Any ideas?

23 06 2010
zona90

Hello Connor,
Just walking into whole directory, at the same time run the rename commands. Like this:

#!/bin/sh
#change MYPATH variable to your own path
MYPATH="/home/teknosoft-machine/Desktop/test/"
cd $MYPATH
find -type d | while read directory
do
echo "diving into : ${directory#"./"}"
cd $MYPATH."/${directory#"./"}"
rename -v 's/\ /\_/g' *
done

22 06 2010
Conor

Sorry for the comment spam, but the relevant explanation which I should have included in the comment above is available in the Perl documentation:

finddepth() works just like find() except that it invokes the &wanted function for a directory after invoking it for the directory’s contents. It does a postorder traversal instead of a preorder traversal, working from the bottom of the directory tree up where find() works from the top of the tree down.

Tinggalkan Balasan

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Ubah )

Twitter picture

You are commenting using your Twitter account. Log Out / Ubah )

Facebook photo

You are commenting using your Facebook account. Log Out / Ubah )

Connecting to %s




Ikuti

Get every new post delivered to your Inbox.