Speedy
Speedy

Reputation: 13

Batch renaming files using variable extracted from file text

Apologies if this has been answered, but I've spent several hours experimenting and searching online for the solution.

I have a folder with several thousand text files named e.g. '1.dat', '2.dat', 3.dat' etc. I would like to rename all of the files by extracting an 8-digit numerical ID from within the file text (the ID is always on the last line in columns 65-73), so that '1.dat' becomes '60741308.dat' etc.

I have made it as far as extracting the ID (using tail and cut) from the text file and assigning it to a variable, which I can then use to rename the file, on a single file,but I am unable to make it work as a batch process in a 'for' loop.

Here is what I have tried:

for i in *.dat
tmpname=$(tail -1 $i| cut -c 65-73) 
mv $i $tmpname.dat
done

I get the following error: bash: syntax error near unexpected token `tmpname=$(tail -1 $i| cut -c 65-73)'

Any help much appreciated.

Upvotes: 1

Views: 140

Answers (1)

The syntax of a for loop in Bash is:

for i in {1..10}
do
  echo $i
done

I can see that, you are missing the do keyword in your example. So, the correct version would be:

for i in *.dat
do
  tmpname=$(tail -1 "$i" | cut -c 65-73) 
  mv "$i" "$tmpname.dat"
done

Upvotes: 1

Related Questions