How can I prepend filenames with ascending numbers like 1_ 2_?











up vote
5
down vote

favorite












How can I add numbers to the files in one directory?



In one directory I have files like below:



fileA
fileB
fileC
fileD


I want to prepend ascending numbers to them, like this:



1_fileA
2_fileB
3_fileC
4_fileD


Thank you in advance.










share|improve this question









New contributor




paweljvn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • @PerlDuck Yes, I have to enumarte them changing their name.
    – paweljvn
    Nov 23 at 17:53










  • Related: askubuntu.com/q/839959
    – Justin
    Nov 24 at 5:25















up vote
5
down vote

favorite












How can I add numbers to the files in one directory?



In one directory I have files like below:



fileA
fileB
fileC
fileD


I want to prepend ascending numbers to them, like this:



1_fileA
2_fileB
3_fileC
4_fileD


Thank you in advance.










share|improve this question









New contributor




paweljvn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • @PerlDuck Yes, I have to enumarte them changing their name.
    – paweljvn
    Nov 23 at 17:53










  • Related: askubuntu.com/q/839959
    – Justin
    Nov 24 at 5:25













up vote
5
down vote

favorite









up vote
5
down vote

favorite











How can I add numbers to the files in one directory?



In one directory I have files like below:



fileA
fileB
fileC
fileD


I want to prepend ascending numbers to them, like this:



1_fileA
2_fileB
3_fileC
4_fileD


Thank you in advance.










share|improve this question









New contributor




paweljvn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











How can I add numbers to the files in one directory?



In one directory I have files like below:



fileA
fileB
fileC
fileD


I want to prepend ascending numbers to them, like this:



1_fileA
2_fileB
3_fileC
4_fileD


Thank you in advance.







command-line bash batch-rename






share|improve this question









New contributor




paweljvn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




paweljvn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited Nov 23 at 18:54









Zanna

49.1k13123234




49.1k13123234






New contributor




paweljvn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked Nov 23 at 17:50









paweljvn

315




315




New contributor




paweljvn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





paweljvn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






paweljvn is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • @PerlDuck Yes, I have to enumarte them changing their name.
    – paweljvn
    Nov 23 at 17:53










  • Related: askubuntu.com/q/839959
    – Justin
    Nov 24 at 5:25


















  • @PerlDuck Yes, I have to enumarte them changing their name.
    – paweljvn
    Nov 23 at 17:53










  • Related: askubuntu.com/q/839959
    – Justin
    Nov 24 at 5:25
















@PerlDuck Yes, I have to enumarte them changing their name.
– paweljvn
Nov 23 at 17:53




@PerlDuck Yes, I have to enumarte them changing their name.
– paweljvn
Nov 23 at 17:53












Related: askubuntu.com/q/839959
– Justin
Nov 24 at 5:25




Related: askubuntu.com/q/839959
– Justin
Nov 24 at 5:25










6 Answers
6






active

oldest

votes

















up vote
7
down vote



accepted










One of the solutions:



cd <your dir> then run in bash (copy and paste in command-line):



n=1; for f in *; do mv "$f" "$((n++))_$f"; done


Bash script case:



#!/bin/bash
n=1
for f in *
do
if [ "$f" = "rename.sh" ]
then
continue
fi
mv "$f" "$((n++))_$f"
done


save it as rename.sh to dir with files to rename, chmod +x rename.sh then run it ./rename.sh






share|improve this answer























  • but can I also run this from vim? I mean to put your code in vim as #!/bin/bash and the run it from the command line?
    – paweljvn
    Nov 23 at 18:09










  • Sure. But you need add this simple command to bash file. Then You need to solve self-renaming of this rename.sh file.
    – S_Flash
    Nov 23 at 18:15






  • 1




    Added example with bash file. If you need something like bash command to run it in any file system place, you need use first example saved in bash file and add this bash file to PATH with alias.
    – S_Flash
    Nov 23 at 18:33


















up vote
7
down vote













If there are more than 9 files, I would use printf to pad the number to get the expected sort order, like this



n=0
for f in *
do printf -v new "%2d$((++n))_$f"
echo mv -v -- "$f" "$new"
done


Remove echo when you see the correct result.



Explanation



In this line, do printf -v new "%2d$((++n))_$f" we create a format for the new filenames and put it into the variable new.



%2d is a 2 digit decimal number. Instead of 2d, you can use 3d etc to get another leading 0 (if you have more than 99 files).



((++n)) increments the variable n (which we set to 0 at the start of the script). Since it is iterated once each time the loop is run, files get incremented name prefixes.



-v makes mv print what will be changed.



-- in the mv statement is to prevent filenames that start with - being interpreted as options.






share|improve this answer






























    up vote
    4
    down vote















    That’s a job for rename:



    rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *


    This defines a variable, increases it if it’s not set (else it would start with 0 instead of 1) and replaces the beginning of the filename with the number increasing it every time. You can change the format easily, e.g. to make it three-digit (001, 002, …) use "%03d_". Running it with -n only prints the changes, to actually perform the renaming remove this flag.



    Example run



    $ ls -1
    fileA
    fileB
    fileC
    fileD
    $ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
    rename(fileA, 1_fileA)
    rename(fileB, 2_fileB)
    rename(fileC, 3_fileC)
    rename(fileD, 4_fileD)
    $ rename 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
    $ ls -1
    1_fileA
    2_fileB
    3_fileC
    4_fileD





    share|improve this answer




























      up vote
      2
      down vote














      1. Open your directory in Nautilus.


      2. Highlight all of the files.


      3. Right-click, and select "Rename..." from the context menu.


      4. On the Rename dialog, click the +Add button.


      5. Select "1,2,3,4" under "Automatic Numbers"



      6. Then, in the Rename dialog, in the text entry field, insert an
        underscore "_" character between "[1, 2, 3]" and "[Original file name]".



        It should look like "[1, 2, 3]_[Original file name]"



      7. Click the Rename button.



      Select "1,2,3,4" in the Rename dialog



      The renamed files






      share|improve this answer




























        up vote
        0
        down vote













        One option is



        cd /path/to/folder/
        ls -1v | rename -n -v 's/^/sprintf("%02d_", ++our$i)/e'



        • This works fine, except with the file names with new line "n". Switch '-1v'takes care of spaces and tabs,


        • Other commands posted here change the order of files with numbers e.g. 10a comes before 1a.


        • Whichever suits in a situation.



        I had some time to test all these commands. Here are the results.



        $ ls
        001abc.txt '10a bc.txt' 1abc.txt '2ab c.txt' 'a'$'t''bc.txt'

        $ ls -1v | rename -n -v 's/^/sprintf("%02d_", ++our$i)/e'
        Reading filenames from file handle (GLOB(0x55cb57991b28))
        rename(001abc.txt, 01_001abc.txt)
        rename(1abc.txt, 02_1abc.txt)
        rename(2ab c.txt, 03_2ab c.txt)
        rename(10a bc.txt, 04_10a bc.txt)
        rename(a bc.txt, 05_a bc.txt)

        $ n=1; for f in *; do echo mv "$f" "$((n++))_$f"; done
        mv 001abc.txt 1_001abc.txt
        mv 10a bc.txt 2_10a bc.txt
        mv 1abc.txt 3_1abc.txt
        mv 2ab c.txt 4_2ab c.txt
        mv a bc.txt 5_a bc.txt

        $ for f in *; do printf -v new "%2d$((++n))_$f"; echo mv -v -- "$f" "$new"; done
        mv -v -- 001abc.txt 09_001abc.txt
        mv -v -- 10a bc.txt 010_10a bc.txt
        mv -v -- 1abc.txt 011_1abc.txt
        mv -v -- 2ab c.txt 012_2ab c.txt
        mv -v -- a bc.txt 013_a bc.txt

        $ ./rename.sh
        mv 001abc.txt 1_001abc.txt
        mv 10a bc.txt 2_10a bc.txt
        mv 1abc.txt 3_1abc.txt
        mv 2ab c.txt 4_2ab c.txt
        mv a bc.txt 5_a bc.txt

        $ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
        rename(001abc.txt, 1_001abc.txt)
        rename(10a bc.txt, 2_10a bc.txt)
        rename(1abc.txt, 3_1abc.txt)
        rename(2ab c.txt, 4_2ab c.txt)
        rename(a bc.txt, 5_a bc.txt)
        rename(rename.sh, 6_rename.sh)

        $ for f in *; do printf -v new "%2d$((++n))_$f"; echo mv -v -- "$f" "$new"; done
        mv -v -- 001abc.txt 01_001abc.txt
        mv -v -- 10a bc.txt 02_10a bc.txt
        mv -v -- 1abc.txt 03_1abc.txt
        mv -v -- 2ab c.txt 04_2ab c.txt
        mv -v -- a bc.txt 05_a bc.txt
        mv -v -- rename.sh 06_rename.sh





        share|improve this answer






























          up vote
          -2
          down vote













          pyrenamer is also a dead easy solution






          share|improve this answer





















          • Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
            – Melebius
            16 hours ago











          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "89"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          paweljvn is a new contributor. Be nice, and check out our Code of Conduct.










           

          draft saved


          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1095456%2fhow-can-i-prepend-filenames-with-ascending-numbers-like-1-2%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          6 Answers
          6






          active

          oldest

          votes








          6 Answers
          6






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          7
          down vote



          accepted










          One of the solutions:



          cd <your dir> then run in bash (copy and paste in command-line):



          n=1; for f in *; do mv "$f" "$((n++))_$f"; done


          Bash script case:



          #!/bin/bash
          n=1
          for f in *
          do
          if [ "$f" = "rename.sh" ]
          then
          continue
          fi
          mv "$f" "$((n++))_$f"
          done


          save it as rename.sh to dir with files to rename, chmod +x rename.sh then run it ./rename.sh






          share|improve this answer























          • but can I also run this from vim? I mean to put your code in vim as #!/bin/bash and the run it from the command line?
            – paweljvn
            Nov 23 at 18:09










          • Sure. But you need add this simple command to bash file. Then You need to solve self-renaming of this rename.sh file.
            – S_Flash
            Nov 23 at 18:15






          • 1




            Added example with bash file. If you need something like bash command to run it in any file system place, you need use first example saved in bash file and add this bash file to PATH with alias.
            – S_Flash
            Nov 23 at 18:33















          up vote
          7
          down vote



          accepted










          One of the solutions:



          cd <your dir> then run in bash (copy and paste in command-line):



          n=1; for f in *; do mv "$f" "$((n++))_$f"; done


          Bash script case:



          #!/bin/bash
          n=1
          for f in *
          do
          if [ "$f" = "rename.sh" ]
          then
          continue
          fi
          mv "$f" "$((n++))_$f"
          done


          save it as rename.sh to dir with files to rename, chmod +x rename.sh then run it ./rename.sh






          share|improve this answer























          • but can I also run this from vim? I mean to put your code in vim as #!/bin/bash and the run it from the command line?
            – paweljvn
            Nov 23 at 18:09










          • Sure. But you need add this simple command to bash file. Then You need to solve self-renaming of this rename.sh file.
            – S_Flash
            Nov 23 at 18:15






          • 1




            Added example with bash file. If you need something like bash command to run it in any file system place, you need use first example saved in bash file and add this bash file to PATH with alias.
            – S_Flash
            Nov 23 at 18:33













          up vote
          7
          down vote



          accepted







          up vote
          7
          down vote



          accepted






          One of the solutions:



          cd <your dir> then run in bash (copy and paste in command-line):



          n=1; for f in *; do mv "$f" "$((n++))_$f"; done


          Bash script case:



          #!/bin/bash
          n=1
          for f in *
          do
          if [ "$f" = "rename.sh" ]
          then
          continue
          fi
          mv "$f" "$((n++))_$f"
          done


          save it as rename.sh to dir with files to rename, chmod +x rename.sh then run it ./rename.sh






          share|improve this answer














          One of the solutions:



          cd <your dir> then run in bash (copy and paste in command-line):



          n=1; for f in *; do mv "$f" "$((n++))_$f"; done


          Bash script case:



          #!/bin/bash
          n=1
          for f in *
          do
          if [ "$f" = "rename.sh" ]
          then
          continue
          fi
          mv "$f" "$((n++))_$f"
          done


          save it as rename.sh to dir with files to rename, chmod +x rename.sh then run it ./rename.sh







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 23 at 18:30

























          answered Nov 23 at 18:02









          S_Flash

          1,061317




          1,061317












          • but can I also run this from vim? I mean to put your code in vim as #!/bin/bash and the run it from the command line?
            – paweljvn
            Nov 23 at 18:09










          • Sure. But you need add this simple command to bash file. Then You need to solve self-renaming of this rename.sh file.
            – S_Flash
            Nov 23 at 18:15






          • 1




            Added example with bash file. If you need something like bash command to run it in any file system place, you need use first example saved in bash file and add this bash file to PATH with alias.
            – S_Flash
            Nov 23 at 18:33


















          • but can I also run this from vim? I mean to put your code in vim as #!/bin/bash and the run it from the command line?
            – paweljvn
            Nov 23 at 18:09










          • Sure. But you need add this simple command to bash file. Then You need to solve self-renaming of this rename.sh file.
            – S_Flash
            Nov 23 at 18:15






          • 1




            Added example with bash file. If you need something like bash command to run it in any file system place, you need use first example saved in bash file and add this bash file to PATH with alias.
            – S_Flash
            Nov 23 at 18:33
















          but can I also run this from vim? I mean to put your code in vim as #!/bin/bash and the run it from the command line?
          – paweljvn
          Nov 23 at 18:09




          but can I also run this from vim? I mean to put your code in vim as #!/bin/bash and the run it from the command line?
          – paweljvn
          Nov 23 at 18:09












          Sure. But you need add this simple command to bash file. Then You need to solve self-renaming of this rename.sh file.
          – S_Flash
          Nov 23 at 18:15




          Sure. But you need add this simple command to bash file. Then You need to solve self-renaming of this rename.sh file.
          – S_Flash
          Nov 23 at 18:15




          1




          1




          Added example with bash file. If you need something like bash command to run it in any file system place, you need use first example saved in bash file and add this bash file to PATH with alias.
          – S_Flash
          Nov 23 at 18:33




          Added example with bash file. If you need something like bash command to run it in any file system place, you need use first example saved in bash file and add this bash file to PATH with alias.
          – S_Flash
          Nov 23 at 18:33












          up vote
          7
          down vote













          If there are more than 9 files, I would use printf to pad the number to get the expected sort order, like this



          n=0
          for f in *
          do printf -v new "%2d$((++n))_$f"
          echo mv -v -- "$f" "$new"
          done


          Remove echo when you see the correct result.



          Explanation



          In this line, do printf -v new "%2d$((++n))_$f" we create a format for the new filenames and put it into the variable new.



          %2d is a 2 digit decimal number. Instead of 2d, you can use 3d etc to get another leading 0 (if you have more than 99 files).



          ((++n)) increments the variable n (which we set to 0 at the start of the script). Since it is iterated once each time the loop is run, files get incremented name prefixes.



          -v makes mv print what will be changed.



          -- in the mv statement is to prevent filenames that start with - being interpreted as options.






          share|improve this answer



























            up vote
            7
            down vote













            If there are more than 9 files, I would use printf to pad the number to get the expected sort order, like this



            n=0
            for f in *
            do printf -v new "%2d$((++n))_$f"
            echo mv -v -- "$f" "$new"
            done


            Remove echo when you see the correct result.



            Explanation



            In this line, do printf -v new "%2d$((++n))_$f" we create a format for the new filenames and put it into the variable new.



            %2d is a 2 digit decimal number. Instead of 2d, you can use 3d etc to get another leading 0 (if you have more than 99 files).



            ((++n)) increments the variable n (which we set to 0 at the start of the script). Since it is iterated once each time the loop is run, files get incremented name prefixes.



            -v makes mv print what will be changed.



            -- in the mv statement is to prevent filenames that start with - being interpreted as options.






            share|improve this answer

























              up vote
              7
              down vote










              up vote
              7
              down vote









              If there are more than 9 files, I would use printf to pad the number to get the expected sort order, like this



              n=0
              for f in *
              do printf -v new "%2d$((++n))_$f"
              echo mv -v -- "$f" "$new"
              done


              Remove echo when you see the correct result.



              Explanation



              In this line, do printf -v new "%2d$((++n))_$f" we create a format for the new filenames and put it into the variable new.



              %2d is a 2 digit decimal number. Instead of 2d, you can use 3d etc to get another leading 0 (if you have more than 99 files).



              ((++n)) increments the variable n (which we set to 0 at the start of the script). Since it is iterated once each time the loop is run, files get incremented name prefixes.



              -v makes mv print what will be changed.



              -- in the mv statement is to prevent filenames that start with - being interpreted as options.






              share|improve this answer














              If there are more than 9 files, I would use printf to pad the number to get the expected sort order, like this



              n=0
              for f in *
              do printf -v new "%2d$((++n))_$f"
              echo mv -v -- "$f" "$new"
              done


              Remove echo when you see the correct result.



              Explanation



              In this line, do printf -v new "%2d$((++n))_$f" we create a format for the new filenames and put it into the variable new.



              %2d is a 2 digit decimal number. Instead of 2d, you can use 3d etc to get another leading 0 (if you have more than 99 files).



              ((++n)) increments the variable n (which we set to 0 at the start of the script). Since it is iterated once each time the loop is run, files get incremented name prefixes.



              -v makes mv print what will be changed.



              -- in the mv statement is to prevent filenames that start with - being interpreted as options.







              share|improve this answer














              share|improve this answer



              share|improve this answer








              edited yesterday

























              answered Nov 23 at 19:05









              Zanna

              49.1k13123234




              49.1k13123234






















                  up vote
                  4
                  down vote















                  That’s a job for rename:



                  rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *


                  This defines a variable, increases it if it’s not set (else it would start with 0 instead of 1) and replaces the beginning of the filename with the number increasing it every time. You can change the format easily, e.g. to make it three-digit (001, 002, …) use "%03d_". Running it with -n only prints the changes, to actually perform the renaming remove this flag.



                  Example run



                  $ ls -1
                  fileA
                  fileB
                  fileC
                  fileD
                  $ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                  rename(fileA, 1_fileA)
                  rename(fileB, 2_fileB)
                  rename(fileC, 3_fileC)
                  rename(fileD, 4_fileD)
                  $ rename 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                  $ ls -1
                  1_fileA
                  2_fileB
                  3_fileC
                  4_fileD





                  share|improve this answer

























                    up vote
                    4
                    down vote















                    That’s a job for rename:



                    rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *


                    This defines a variable, increases it if it’s not set (else it would start with 0 instead of 1) and replaces the beginning of the filename with the number increasing it every time. You can change the format easily, e.g. to make it three-digit (001, 002, …) use "%03d_". Running it with -n only prints the changes, to actually perform the renaming remove this flag.



                    Example run



                    $ ls -1
                    fileA
                    fileB
                    fileC
                    fileD
                    $ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                    rename(fileA, 1_fileA)
                    rename(fileB, 2_fileB)
                    rename(fileC, 3_fileC)
                    rename(fileD, 4_fileD)
                    $ rename 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                    $ ls -1
                    1_fileA
                    2_fileB
                    3_fileC
                    4_fileD





                    share|improve this answer























                      up vote
                      4
                      down vote










                      up vote
                      4
                      down vote











                      That’s a job for rename:



                      rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *


                      This defines a variable, increases it if it’s not set (else it would start with 0 instead of 1) and replaces the beginning of the filename with the number increasing it every time. You can change the format easily, e.g. to make it three-digit (001, 002, …) use "%03d_". Running it with -n only prints the changes, to actually perform the renaming remove this flag.



                      Example run



                      $ ls -1
                      fileA
                      fileB
                      fileC
                      fileD
                      $ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                      rename(fileA, 1_fileA)
                      rename(fileB, 2_fileB)
                      rename(fileC, 3_fileC)
                      rename(fileD, 4_fileD)
                      $ rename 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                      $ ls -1
                      1_fileA
                      2_fileB
                      3_fileC
                      4_fileD





                      share|improve this answer














                      That’s a job for rename:



                      rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *


                      This defines a variable, increases it if it’s not set (else it would start with 0 instead of 1) and replaces the beginning of the filename with the number increasing it every time. You can change the format easily, e.g. to make it three-digit (001, 002, …) use "%03d_". Running it with -n only prints the changes, to actually perform the renaming remove this flag.



                      Example run



                      $ ls -1
                      fileA
                      fileB
                      fileC
                      fileD
                      $ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                      rename(fileA, 1_fileA)
                      rename(fileB, 2_fileB)
                      rename(fileC, 3_fileC)
                      rename(fileD, 4_fileD)
                      $ rename 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                      $ ls -1
                      1_fileA
                      2_fileB
                      3_fileC
                      4_fileD






                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered Nov 23 at 20:27









                      dessert

                      21.3k55896




                      21.3k55896






















                          up vote
                          2
                          down vote














                          1. Open your directory in Nautilus.


                          2. Highlight all of the files.


                          3. Right-click, and select "Rename..." from the context menu.


                          4. On the Rename dialog, click the +Add button.


                          5. Select "1,2,3,4" under "Automatic Numbers"



                          6. Then, in the Rename dialog, in the text entry field, insert an
                            underscore "_" character between "[1, 2, 3]" and "[Original file name]".



                            It should look like "[1, 2, 3]_[Original file name]"



                          7. Click the Rename button.



                          Select "1,2,3,4" in the Rename dialog



                          The renamed files






                          share|improve this answer

























                            up vote
                            2
                            down vote














                            1. Open your directory in Nautilus.


                            2. Highlight all of the files.


                            3. Right-click, and select "Rename..." from the context menu.


                            4. On the Rename dialog, click the +Add button.


                            5. Select "1,2,3,4" under "Automatic Numbers"



                            6. Then, in the Rename dialog, in the text entry field, insert an
                              underscore "_" character between "[1, 2, 3]" and "[Original file name]".



                              It should look like "[1, 2, 3]_[Original file name]"



                            7. Click the Rename button.



                            Select "1,2,3,4" in the Rename dialog



                            The renamed files






                            share|improve this answer























                              up vote
                              2
                              down vote










                              up vote
                              2
                              down vote










                              1. Open your directory in Nautilus.


                              2. Highlight all of the files.


                              3. Right-click, and select "Rename..." from the context menu.


                              4. On the Rename dialog, click the +Add button.


                              5. Select "1,2,3,4" under "Automatic Numbers"



                              6. Then, in the Rename dialog, in the text entry field, insert an
                                underscore "_" character between "[1, 2, 3]" and "[Original file name]".



                                It should look like "[1, 2, 3]_[Original file name]"



                              7. Click the Rename button.



                              Select "1,2,3,4" in the Rename dialog



                              The renamed files






                              share|improve this answer













                              1. Open your directory in Nautilus.


                              2. Highlight all of the files.


                              3. Right-click, and select "Rename..." from the context menu.


                              4. On the Rename dialog, click the +Add button.


                              5. Select "1,2,3,4" under "Automatic Numbers"



                              6. Then, in the Rename dialog, in the text entry field, insert an
                                underscore "_" character between "[1, 2, 3]" and "[Original file name]".



                                It should look like "[1, 2, 3]_[Original file name]"



                              7. Click the Rename button.



                              Select "1,2,3,4" in the Rename dialog



                              The renamed files







                              share|improve this answer












                              share|improve this answer



                              share|improve this answer










                              answered yesterday









                              PJ Singh

                              4,14222348




                              4,14222348






















                                  up vote
                                  0
                                  down vote













                                  One option is



                                  cd /path/to/folder/
                                  ls -1v | rename -n -v 's/^/sprintf("%02d_", ++our$i)/e'



                                  • This works fine, except with the file names with new line "n". Switch '-1v'takes care of spaces and tabs,


                                  • Other commands posted here change the order of files with numbers e.g. 10a comes before 1a.


                                  • Whichever suits in a situation.



                                  I had some time to test all these commands. Here are the results.



                                  $ ls
                                  001abc.txt '10a bc.txt' 1abc.txt '2ab c.txt' 'a'$'t''bc.txt'

                                  $ ls -1v | rename -n -v 's/^/sprintf("%02d_", ++our$i)/e'
                                  Reading filenames from file handle (GLOB(0x55cb57991b28))
                                  rename(001abc.txt, 01_001abc.txt)
                                  rename(1abc.txt, 02_1abc.txt)
                                  rename(2ab c.txt, 03_2ab c.txt)
                                  rename(10a bc.txt, 04_10a bc.txt)
                                  rename(a bc.txt, 05_a bc.txt)

                                  $ n=1; for f in *; do echo mv "$f" "$((n++))_$f"; done
                                  mv 001abc.txt 1_001abc.txt
                                  mv 10a bc.txt 2_10a bc.txt
                                  mv 1abc.txt 3_1abc.txt
                                  mv 2ab c.txt 4_2ab c.txt
                                  mv a bc.txt 5_a bc.txt

                                  $ for f in *; do printf -v new "%2d$((++n))_$f"; echo mv -v -- "$f" "$new"; done
                                  mv -v -- 001abc.txt 09_001abc.txt
                                  mv -v -- 10a bc.txt 010_10a bc.txt
                                  mv -v -- 1abc.txt 011_1abc.txt
                                  mv -v -- 2ab c.txt 012_2ab c.txt
                                  mv -v -- a bc.txt 013_a bc.txt

                                  $ ./rename.sh
                                  mv 001abc.txt 1_001abc.txt
                                  mv 10a bc.txt 2_10a bc.txt
                                  mv 1abc.txt 3_1abc.txt
                                  mv 2ab c.txt 4_2ab c.txt
                                  mv a bc.txt 5_a bc.txt

                                  $ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                                  rename(001abc.txt, 1_001abc.txt)
                                  rename(10a bc.txt, 2_10a bc.txt)
                                  rename(1abc.txt, 3_1abc.txt)
                                  rename(2ab c.txt, 4_2ab c.txt)
                                  rename(a bc.txt, 5_a bc.txt)
                                  rename(rename.sh, 6_rename.sh)

                                  $ for f in *; do printf -v new "%2d$((++n))_$f"; echo mv -v -- "$f" "$new"; done
                                  mv -v -- 001abc.txt 01_001abc.txt
                                  mv -v -- 10a bc.txt 02_10a bc.txt
                                  mv -v -- 1abc.txt 03_1abc.txt
                                  mv -v -- 2ab c.txt 04_2ab c.txt
                                  mv -v -- a bc.txt 05_a bc.txt
                                  mv -v -- rename.sh 06_rename.sh





                                  share|improve this answer



























                                    up vote
                                    0
                                    down vote













                                    One option is



                                    cd /path/to/folder/
                                    ls -1v | rename -n -v 's/^/sprintf("%02d_", ++our$i)/e'



                                    • This works fine, except with the file names with new line "n". Switch '-1v'takes care of spaces and tabs,


                                    • Other commands posted here change the order of files with numbers e.g. 10a comes before 1a.


                                    • Whichever suits in a situation.



                                    I had some time to test all these commands. Here are the results.



                                    $ ls
                                    001abc.txt '10a bc.txt' 1abc.txt '2ab c.txt' 'a'$'t''bc.txt'

                                    $ ls -1v | rename -n -v 's/^/sprintf("%02d_", ++our$i)/e'
                                    Reading filenames from file handle (GLOB(0x55cb57991b28))
                                    rename(001abc.txt, 01_001abc.txt)
                                    rename(1abc.txt, 02_1abc.txt)
                                    rename(2ab c.txt, 03_2ab c.txt)
                                    rename(10a bc.txt, 04_10a bc.txt)
                                    rename(a bc.txt, 05_a bc.txt)

                                    $ n=1; for f in *; do echo mv "$f" "$((n++))_$f"; done
                                    mv 001abc.txt 1_001abc.txt
                                    mv 10a bc.txt 2_10a bc.txt
                                    mv 1abc.txt 3_1abc.txt
                                    mv 2ab c.txt 4_2ab c.txt
                                    mv a bc.txt 5_a bc.txt

                                    $ for f in *; do printf -v new "%2d$((++n))_$f"; echo mv -v -- "$f" "$new"; done
                                    mv -v -- 001abc.txt 09_001abc.txt
                                    mv -v -- 10a bc.txt 010_10a bc.txt
                                    mv -v -- 1abc.txt 011_1abc.txt
                                    mv -v -- 2ab c.txt 012_2ab c.txt
                                    mv -v -- a bc.txt 013_a bc.txt

                                    $ ./rename.sh
                                    mv 001abc.txt 1_001abc.txt
                                    mv 10a bc.txt 2_10a bc.txt
                                    mv 1abc.txt 3_1abc.txt
                                    mv 2ab c.txt 4_2ab c.txt
                                    mv a bc.txt 5_a bc.txt

                                    $ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                                    rename(001abc.txt, 1_001abc.txt)
                                    rename(10a bc.txt, 2_10a bc.txt)
                                    rename(1abc.txt, 3_1abc.txt)
                                    rename(2ab c.txt, 4_2ab c.txt)
                                    rename(a bc.txt, 5_a bc.txt)
                                    rename(rename.sh, 6_rename.sh)

                                    $ for f in *; do printf -v new "%2d$((++n))_$f"; echo mv -v -- "$f" "$new"; done
                                    mv -v -- 001abc.txt 01_001abc.txt
                                    mv -v -- 10a bc.txt 02_10a bc.txt
                                    mv -v -- 1abc.txt 03_1abc.txt
                                    mv -v -- 2ab c.txt 04_2ab c.txt
                                    mv -v -- a bc.txt 05_a bc.txt
                                    mv -v -- rename.sh 06_rename.sh





                                    share|improve this answer

























                                      up vote
                                      0
                                      down vote










                                      up vote
                                      0
                                      down vote









                                      One option is



                                      cd /path/to/folder/
                                      ls -1v | rename -n -v 's/^/sprintf("%02d_", ++our$i)/e'



                                      • This works fine, except with the file names with new line "n". Switch '-1v'takes care of spaces and tabs,


                                      • Other commands posted here change the order of files with numbers e.g. 10a comes before 1a.


                                      • Whichever suits in a situation.



                                      I had some time to test all these commands. Here are the results.



                                      $ ls
                                      001abc.txt '10a bc.txt' 1abc.txt '2ab c.txt' 'a'$'t''bc.txt'

                                      $ ls -1v | rename -n -v 's/^/sprintf("%02d_", ++our$i)/e'
                                      Reading filenames from file handle (GLOB(0x55cb57991b28))
                                      rename(001abc.txt, 01_001abc.txt)
                                      rename(1abc.txt, 02_1abc.txt)
                                      rename(2ab c.txt, 03_2ab c.txt)
                                      rename(10a bc.txt, 04_10a bc.txt)
                                      rename(a bc.txt, 05_a bc.txt)

                                      $ n=1; for f in *; do echo mv "$f" "$((n++))_$f"; done
                                      mv 001abc.txt 1_001abc.txt
                                      mv 10a bc.txt 2_10a bc.txt
                                      mv 1abc.txt 3_1abc.txt
                                      mv 2ab c.txt 4_2ab c.txt
                                      mv a bc.txt 5_a bc.txt

                                      $ for f in *; do printf -v new "%2d$((++n))_$f"; echo mv -v -- "$f" "$new"; done
                                      mv -v -- 001abc.txt 09_001abc.txt
                                      mv -v -- 10a bc.txt 010_10a bc.txt
                                      mv -v -- 1abc.txt 011_1abc.txt
                                      mv -v -- 2ab c.txt 012_2ab c.txt
                                      mv -v -- a bc.txt 013_a bc.txt

                                      $ ./rename.sh
                                      mv 001abc.txt 1_001abc.txt
                                      mv 10a bc.txt 2_10a bc.txt
                                      mv 1abc.txt 3_1abc.txt
                                      mv 2ab c.txt 4_2ab c.txt
                                      mv a bc.txt 5_a bc.txt

                                      $ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                                      rename(001abc.txt, 1_001abc.txt)
                                      rename(10a bc.txt, 2_10a bc.txt)
                                      rename(1abc.txt, 3_1abc.txt)
                                      rename(2ab c.txt, 4_2ab c.txt)
                                      rename(a bc.txt, 5_a bc.txt)
                                      rename(rename.sh, 6_rename.sh)

                                      $ for f in *; do printf -v new "%2d$((++n))_$f"; echo mv -v -- "$f" "$new"; done
                                      mv -v -- 001abc.txt 01_001abc.txt
                                      mv -v -- 10a bc.txt 02_10a bc.txt
                                      mv -v -- 1abc.txt 03_1abc.txt
                                      mv -v -- 2ab c.txt 04_2ab c.txt
                                      mv -v -- a bc.txt 05_a bc.txt
                                      mv -v -- rename.sh 06_rename.sh





                                      share|improve this answer














                                      One option is



                                      cd /path/to/folder/
                                      ls -1v | rename -n -v 's/^/sprintf("%02d_", ++our$i)/e'



                                      • This works fine, except with the file names with new line "n". Switch '-1v'takes care of spaces and tabs,


                                      • Other commands posted here change the order of files with numbers e.g. 10a comes before 1a.


                                      • Whichever suits in a situation.



                                      I had some time to test all these commands. Here are the results.



                                      $ ls
                                      001abc.txt '10a bc.txt' 1abc.txt '2ab c.txt' 'a'$'t''bc.txt'

                                      $ ls -1v | rename -n -v 's/^/sprintf("%02d_", ++our$i)/e'
                                      Reading filenames from file handle (GLOB(0x55cb57991b28))
                                      rename(001abc.txt, 01_001abc.txt)
                                      rename(1abc.txt, 02_1abc.txt)
                                      rename(2ab c.txt, 03_2ab c.txt)
                                      rename(10a bc.txt, 04_10a bc.txt)
                                      rename(a bc.txt, 05_a bc.txt)

                                      $ n=1; for f in *; do echo mv "$f" "$((n++))_$f"; done
                                      mv 001abc.txt 1_001abc.txt
                                      mv 10a bc.txt 2_10a bc.txt
                                      mv 1abc.txt 3_1abc.txt
                                      mv 2ab c.txt 4_2ab c.txt
                                      mv a bc.txt 5_a bc.txt

                                      $ for f in *; do printf -v new "%2d$((++n))_$f"; echo mv -v -- "$f" "$new"; done
                                      mv -v -- 001abc.txt 09_001abc.txt
                                      mv -v -- 10a bc.txt 010_10a bc.txt
                                      mv -v -- 1abc.txt 011_1abc.txt
                                      mv -v -- 2ab c.txt 012_2ab c.txt
                                      mv -v -- a bc.txt 013_a bc.txt

                                      $ ./rename.sh
                                      mv 001abc.txt 1_001abc.txt
                                      mv 10a bc.txt 2_10a bc.txt
                                      mv 1abc.txt 3_1abc.txt
                                      mv 2ab c.txt 4_2ab c.txt
                                      mv a bc.txt 5_a bc.txt

                                      $ rename -n 'our $i; if (!$i) {$i++}; s/^/sprintf("%d_", $i++)/e' *
                                      rename(001abc.txt, 1_001abc.txt)
                                      rename(10a bc.txt, 2_10a bc.txt)
                                      rename(1abc.txt, 3_1abc.txt)
                                      rename(2ab c.txt, 4_2ab c.txt)
                                      rename(a bc.txt, 5_a bc.txt)
                                      rename(rename.sh, 6_rename.sh)

                                      $ for f in *; do printf -v new "%2d$((++n))_$f"; echo mv -v -- "$f" "$new"; done
                                      mv -v -- 001abc.txt 01_001abc.txt
                                      mv -v -- 10a bc.txt 02_10a bc.txt
                                      mv -v -- 1abc.txt 03_1abc.txt
                                      mv -v -- 2ab c.txt 04_2ab c.txt
                                      mv -v -- a bc.txt 05_a bc.txt
                                      mv -v -- rename.sh 06_rename.sh






                                      share|improve this answer














                                      share|improve this answer



                                      share|improve this answer








                                      edited Nov 24 at 14:43

























                                      answered Nov 24 at 13:55









                                      Hobbyist

                                      1,036617




                                      1,036617






















                                          up vote
                                          -2
                                          down vote













                                          pyrenamer is also a dead easy solution






                                          share|improve this answer





















                                          • Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
                                            – Melebius
                                            16 hours ago















                                          up vote
                                          -2
                                          down vote













                                          pyrenamer is also a dead easy solution






                                          share|improve this answer





















                                          • Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
                                            – Melebius
                                            16 hours ago













                                          up vote
                                          -2
                                          down vote










                                          up vote
                                          -2
                                          down vote









                                          pyrenamer is also a dead easy solution






                                          share|improve this answer












                                          pyrenamer is also a dead easy solution







                                          share|improve this answer












                                          share|improve this answer



                                          share|improve this answer










                                          answered yesterday









                                          Carol McAnulty

                                          372




                                          372












                                          • Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
                                            – Melebius
                                            16 hours ago


















                                          • Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
                                            – Melebius
                                            16 hours ago
















                                          Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
                                          – Melebius
                                          16 hours ago




                                          Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
                                          – Melebius
                                          16 hours ago










                                          paweljvn is a new contributor. Be nice, and check out our Code of Conduct.










                                           

                                          draft saved


                                          draft discarded


















                                          paweljvn is a new contributor. Be nice, and check out our Code of Conduct.













                                          paweljvn is a new contributor. Be nice, and check out our Code of Conduct.












                                          paweljvn is a new contributor. Be nice, and check out our Code of Conduct.















                                           


                                          draft saved


                                          draft discarded














                                          StackExchange.ready(
                                          function () {
                                          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1095456%2fhow-can-i-prepend-filenames-with-ascending-numbers-like-1-2%23new-answer', 'question_page');
                                          }
                                          );

                                          Post as a guest















                                          Required, but never shown





















































                                          Required, but never shown














                                          Required, but never shown












                                          Required, but never shown







                                          Required, but never shown

































                                          Required, but never shown














                                          Required, but never shown












                                          Required, but never shown







                                          Required, but never shown







                                          Popular posts from this blog

                                          AnyDesk - Fatal Program Failure

                                          How to calibrate 16:9 built-in touch-screen to a 4:3 resolution?

                                          QoS: MAC-Priority for clients behind a repeater