Sand
Sand

Reputation: 115

How to rename a file by retaining first 6 characters of my file name and remove rest of the characters?

I have file names like: Rv0012_gyrB.txt, Rv0001_Rv.txt How to rename a file by retaining first 6 characters of my file name and remove rest of the characters? My desired output should be: Rv0012.txt and Rv0001.txt Please let me know, how to do it using a script in Linux for multiple files.

Upvotes: 0

Views: 651

Answers (2)

stephanmg
stephanmg

Reputation: 766

for file in *; do
  filename=${file%_*}
  fileext=${file##*.}
  if [ "$fileext" = "$file" ]; then
    mv "$file $filename"
  else
    mv "$file $filename.$fileext"
  fi
done

This should do it, assuming you want to separate at the first occurence of underscore.

Upvotes: 1

xhg
xhg

Reputation: 1885

If you want to keep first 6 characters, then this:

for file in `ls | grep .txt`;
do
    extension="${file##*.}"
    filename="${file%.*}"
    filename=${filename:0:6}
    echo $filename.$extension
    mv $file $filename.$extension
done

If you want to get all characters before "_", then this will do the job

for file in `ls | grep .txt`;
do
    extension="${file##*.}"
    filename="${file%.*}"
    filename=`echo $filename | cut -d "_" -f1`
    echo $filename.$extension
    mv $file $filename.$extension
done

In case you have some files without extensions, try this

for file in `ls`;
do
    extension="${file##*.}"
    filename="${file%.*}"
    filename=`echo $filename | cut -d "_" -f1`
    if [ $file == $extension ] 
    then
        mv $file $filename
    else
        mv $file $filename.$extension
    fi
done

Upvotes: 0

Related Questions