Visit Our UNIX and Linux User Community


Change all filenames in a directory


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Change all filenames in a directory
# 15  
Old 09-18-2009
Quote:
Originally Posted by crumb
I would also be ok removing all the spaces
My approach (- beware of recursion):

Code:
[house@leonov] more scrub.bash
#!/bin/bash

SCRIPT=$( readlink -f ${0} )
TARGET="$1"
if [ ! -d "$TARGET" ]
then
  echo "Usage: sh scrub.bash '[target folder]'"
  exit 1
else
  cd "$TARGET"
fi

BUFFER=/tmp/files.$$
ls -1 . > $BUFFER
while read FILE
do
  NAME=$( echo "$FILE" | sed -e "s/ /_/g" )
  if [ "$FILE" != "$NAME" ]
  then
    echo -ne "Scrubbed: "
    mv -vT "$FILE" "$NAME"
  fi
  if [ -d "$NAME" ]
  then
    sh $SCRIPT "$NAME"
  fi
done < $BUFFER
rm -f $BUFFER

exit 0

# [game over]

Code:
[house@leonov] ls testFiles
12345 test.file1  12345 test.file2  12345 test.file3
[house@leonov] sh scrub.bash testFiles
Scrubbed: `12345 test.file1' -> `12345_test.file1'
Scrubbed: `12345 test.file2' -> `12345_test.file2'
Scrubbed: `12345 test.file3' -> `12345_test.file3'
[house@leonov] ls testFiles
12345_test.file1  12345_test.file2  12345_test.file3


Last edited by dr.house; 09-18-2009 at 06:17 AM.. Reason: Debugging (sort of ...)
# 16  
Old 09-18-2009
Quote:
Originally Posted by edidataguy
Try this one liner:
Code:
ls -1 [0-9][0-9][0-9][0-9][0-9]* | sed 's/\(^[0-9]\{5\}\)\(.*\)/mv & \2/' | ksh

I thought you original requirement was to remove the numbers in begining from the file?
Hope this is what you are looking for:
Code:
ls -1 [0-9][0-9][0-9][0-9][0-9]* | sed 's/\(^[0-9]\{5\}\)\(.*\)/mv "&"  "\2"/' | ksh

This will over write any duplicate files that might be present after renaming.
You will finally end up having only one file.

Last edited by edidataguy; 09-18-2009 at 02:02 PM..
# 17  
Old 09-18-2009
That works perfect guy. I think that may be the winner. I had to install ksh but that works for me. I don't have to make changes to the spaces either.

Thanks

ps... the character string i need to remove at the beginning is actually two letters then a 4 digit number, then dash, then 2 digit number, then space, dash, space.
I realized I need to be more detailed in my description of the issue needing solving.
# 18  
Old 09-18-2009
Glad it worked for you.
One bit of advice.
In unix files with space (or any improper char) is a pain in the neck.
As you go further it will cause more and more issues (including backup etc). Scrips will work fine when testing, but fail in realtime.
Resolve it at the root rather than through the script.

Previous Thread | Next Thread
Test Your Knowledge in Computers #776
Difficulty: Medium
The Fourier transform (FT) decomposes a function of time (a signal) into its constituent frequencies.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Change filenames recursively

Hello, I made a mistake in a script and now need to go back and change allot of filenames. I need to change "v4" in filenames to "v3". I was thinking of something like this. #!/bin/bash FILELIST=$(ls -f -R *) for FILE in $FILELIST do # create new filename ... (5 Replies)
Discussion started by: LMHmedchem
5 Replies

2. Shell Programming and Scripting

change filenames but not extension

I have a filename with a bunch of periods that I want to replace with underscores, but I don't want to change the extension. Ex: I want file.test1.f-1.fig.eps to be file_test1_f-1_fig.eps Using awk, the following line will replace ALL periods with underscores, but I want to leave the... (2 Replies)
Discussion started by: erinbot
2 Replies

3. Shell Programming and Scripting

Change all filenames under different folders...

Hi, all: I'd love to use shell script to change all filenames under different folders once for all: I've got over 100 folders, in each of them, there is a file named "a.ppm". I wanna change all these "a.ppm" to "b.ppm", and still . Visually, the directory structure looks like: and hope... (1 Reply)
Discussion started by: jiapei100
1 Replies

4. Shell Programming and Scripting

Change part of filenames in a bulk way

Hallo! I have generated lots of data file which all having this format: sp*t1overt2*.txt Now I want to change them in this way: sp*t2overt1*.txt The rest of the file names stay unchanged. I know this is kind of routine action in sed or awk, but dont know how! I tried this command: ... (6 Replies)
Discussion started by: forgi
6 Replies

5. UNIX for Dummies Questions & Answers

Filenames change in a directory

Hi I have abc_ahb_one.v abc_ahb_two.v abc_ahb_three.v ........l like this -----upto abc_ahb_ninety.v in some directory. I need to change those file names to like below. ... (5 Replies)
Discussion started by: praneethk
5 Replies

6. Shell Programming and Scripting

Use filenames to create directory.

I have many files similar to this one: AC41_AC85_86_AC128_129_MC171_173_SF_207_FMV.pdf. I want a directory named AC41 and to put the file AC41_AC85_86_AC128_129_MC171_173_SF_207_FMV.pdf into the directory. Next, a directory named AC85 and put the file into it. Also, continue to cycle through... (1 Reply)
Discussion started by: ndnkyd
1 Replies

7. Shell Programming and Scripting

concatenating the filenames in a directory

hi all, I have a requirement where in i have to read all the filenames based on a pattern from a directory and concatenate all these file names and write it to another file. i am using the following code to do this var1='' for filename in $_DIR/${FILE_NAME}* do if if then... (7 Replies)
Discussion started by: nvuradi
7 Replies

8. Shell Programming and Scripting

looping thru filenames in a directory

Hi, i am very new to UNIX, i am trying to loop thru the files in a directory. I got the filenames into a variable using $files=`ls` Here $files will contain <filename1> <filename2> <filename3> I want to get one filename at a time and append it to some some text. forexample, ... (1 Reply)
Discussion started by: silas.john
1 Replies

9. UNIX for Dummies Questions & Answers

Need to change filenames in a particular directory from lowercase to UPPERCASE

Hi, I need a shell script which changes a bunch of files in a particular directory from lowercase to UPPERCASE. I am not very familiar with shell scripts so a detailed explanation would be greatly appreciated!!!! Thanks ini advance! :) (7 Replies)
Discussion started by: Duke_Lukem
7 Replies

10. Shell Programming and Scripting

change filenames to Proper case

Hi, I have files with all its characters in lower cases. I need to change them to "proper case" (starting char to be come Upper case). How can I? Pls suggest. for e.g. xyz.txt should become Xyz.txt TIA Prvn (7 Replies)
Discussion started by: prvnrk
7 Replies

Featured Tech Videos