I have a lot of files to process and I need to replace their original names with this format in bash:
00000000000001_1.jpg
00000000000002_1.jpg
00000000000003_1.jpg
and so on
I have a lot of files to process and I need to replace their original names with this format in bash:
00000000000001_1.jpg
00000000000002_1.jpg
00000000000003_1.jpg
and so on
Adapted from one of Oli's answers:
rename -n 's/.+/our $i; $i++; sprintf("%014d_1.jpg", $i)/e' *
This takes every file in the current directory and renames it with a number with 14
digits (I hope I counted correctly) followed by _1.jpg
. our $i
introduces a global variable i
, which is then increased by one and printed with sprintf
. e
commands rename
to evaluate the right side of the replacement (= everything between the second and the third /
) as an expression rather than literally. If you're happy with the results, remove -n
to perform the renaming.
If you want to dive into perl expressions and their beauty, the perldoc is the way to go.
Would this works for you :
i=1
for file in *; do
mv "$file" "$(printf %014d $i)_1.jpg"
i=$((i+1))
done
It will rename every file in the current directory like this :
00000000000001_1.jpg
.
.
00000000000009_1.jpg
.
.
00000000000010_1.jpg
.
.
._1.jpg
to _1.jpg
then I think it's perfect.
– WinEunuuchs2Unix
Mar 20 '18 at 01:48
rename
utility is powerful, flexible, and fast. Note that the approach you've shown here can be simplified (but it does work just fine, as written). – Eliah Kagan Mar 20 '18 at 05:43