shenwei356 / brename

A practical cross-platform command-line tool for safely batch renaming files/directories via regular expression
https://github.com/shenwei356/brename
MIT License
262 stars 22 forks source link

Natural sort with auto increment #36

Closed gdommergue closed 7 months ago

gdommergue commented 7 months ago

Hi, I would like to know if it's possible to rename files using natural sort (-N) + auto increment ({nr})? I've tried the following but it doesn't work as -N seems to work only with -l.

My folder:

$ ls
10.jpg  13.jpg  16.jpg  19.jpg  21.jpg  24.jpg  27.jpg  2.jpg   32.jpg  35.jpg  38.jpg  40.jpg  43.jpg  46.jpg  49.jpg  5.jpg  8.jpg
11.jpg  14.jpg  17.jpg  1.jpg   22.jpg  25.jpg  28.jpg  30.jpg  33.jpg  36.jpg  39.jpg  41.jpg  44.jpg  47.jpg  4.jpg   6.jpg  9.jpg
12.jpg  15.jpg  18.jpg  20.jpg  23.jpg  26.jpg  29.jpg  31.jpg  34.jpg  37.jpg  3.jpg   42.jpg  45.jpg  48.jpg  50.jpg  7.jpg
$ ls -v
1.jpg  4.jpg  7.jpg  10.jpg  13.jpg  16.jpg  19.jpg  22.jpg  25.jpg  28.jpg  31.jpg  34.jpg  37.jpg  40.jpg  43.jpg  46.jpg  49.jpg
2.jpg  5.jpg  8.jpg  11.jpg  14.jpg  17.jpg  20.jpg  23.jpg  26.jpg  29.jpg  32.jpg  35.jpg  38.jpg  41.jpg  44.jpg  47.jpg  50.jpg
3.jpg  6.jpg  9.jpg  12.jpg  15.jpg  18.jpg  21.jpg  24.jpg  27.jpg  30.jpg  33.jpg  36.jpg  39.jpg  42.jpg  45.jpg  48.jpg
$ brename  -p ".*\.jpg" -r "{nr}.jpg" -N --nr-width 3 --start-num 1 -d
Searching for paths to rename...

  [OK] 1.jpg -> 001.jpg
  [OK] 10.jpg -> 002.jpg    // Expecting 2.jpg -> 002.jpg
  [OK] 11.jpg -> 003.jpg
  [OK] 12.jpg -> 004.jpg
  [OK] 13.jpg -> 005.jpg
  [OK] 14.jpg -> 006.jpg
  [OK] 15.jpg -> 007.jpg
  [OK] 16.jpg -> 008.jpg
  [OK] 17.jpg -> 009.jpg
  [OK] 18.jpg -> 010.jpg
  [OK] 19.jpg -> 011.jpg
  [OK] 2.jpg -> 012.jpg
  [OK] 20.jpg -> 013.jpg
...

Here's the result of the command i've used to list matching files using natural sort in my previous folder.

$ brename  -p ".*\.jpg" -l -N
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
10.jpg
11.jpg
12.jpg
...

Thanks!

shenwei356 commented 7 months ago

Done. Please try it.

$ brename  -p ".*\.jpg" -r "{nr}.jpg" -N --nr-width 3 --start-num 1 -d
Searching for paths to rename...

  [OK] 1.jpg -> 001.jpg
  [OK] 2.jpg -> 002.jpg
  [OK] 3.jpg -> 003.jpg
  [OK] 4.jpg -> 004.jpg
  [OK] 5.jpg -> 005.jpg
  [OK] 6.jpg -> 006.jpg
  [OK] 7.jpg -> 007.jpg
  [OK] 8.jpg -> 008.jpg
  [OK] 9.jpg -> 009.jpg
  [OK] 10.jpg -> 010.jpg
  [OK] 11.jpg -> 011.jpg
  [OK] 12.jpg -> 012.jpg
  [OK] 13.jpg -> 013.jpg
  [OK] 14.jpg -> 014.jpg
  [OK] 15.jpg -> 015.jpg
  [OK] 16.jpg -> 016.jpg
  [OK] 17.jpg -> 017.jpg
  [OK] 18.jpg -> 018.jpg
  [OK] 19.jpg -> 019.jpg
  [OK] 20.jpg -> 020.jpg
gdommergue commented 7 months ago

Working as expected on my side, thanks for the quick feedback and update!