How can I prepend filenames with ascending numbers like 1_ 2_?
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
add a comment |
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
@PerlDuck Yes, I have to enumarte them changing their name.
– paweljvn
Nov 23 '18 at 17:53
Related: askubuntu.com/q/839959
– Justin
Nov 24 '18 at 5:25
add a comment |
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
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
command-line bash batch-rename
edited Nov 23 '18 at 18:54
Zanna
50.3k13133241
50.3k13133241
asked Nov 23 '18 at 17:50
paweljvnpaweljvn
466
466
@PerlDuck Yes, I have to enumarte them changing their name.
– paweljvn
Nov 23 '18 at 17:53
Related: askubuntu.com/q/839959
– Justin
Nov 24 '18 at 5:25
add a comment |
@PerlDuck Yes, I have to enumarte them changing their name.
– paweljvn
Nov 23 '18 at 17:53
Related: askubuntu.com/q/839959
– Justin
Nov 24 '18 at 5:25
@PerlDuck Yes, I have to enumarte them changing their name.
– paweljvn
Nov 23 '18 at 17:53
@PerlDuck Yes, I have to enumarte them changing their name.
– paweljvn
Nov 23 '18 at 17:53
Related: askubuntu.com/q/839959
– Justin
Nov 24 '18 at 5:25
Related: askubuntu.com/q/839959
– Justin
Nov 24 '18 at 5:25
add a comment |
6 Answers
6
active
oldest
votes
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
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 '18 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.
– mature
Nov 23 '18 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.
– mature
Nov 23 '18 at 18:33
add a comment |
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.
add a comment |
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
add a comment |
Open your directory in Nautilus.
Highlight all of the files.
Right-click, and select "Rename..." from the context menu.
On the Rename dialog, click the +Add button.
Select "1,2,3,4" under "Automatic Numbers"
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]"
Click the Rename button.
add a comment |
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
add a comment |
pyrenamer is also a dead easy solution
Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
– Melebius
Nov 27 '18 at 8:25
add a comment |
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',
autoActivateHeartbeat: false,
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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
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 '18 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.
– mature
Nov 23 '18 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.
– mature
Nov 23 '18 at 18:33
add a comment |
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
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 '18 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.
– mature
Nov 23 '18 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.
– mature
Nov 23 '18 at 18:33
add a comment |
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
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
edited Nov 23 '18 at 18:30
answered Nov 23 '18 at 18:02
maturemature
1,694524
1,694524
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 '18 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.
– mature
Nov 23 '18 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.
– mature
Nov 23 '18 at 18:33
add a comment |
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 '18 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.
– mature
Nov 23 '18 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.
– mature
Nov 23 '18 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 '18 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 '18 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.
– mature
Nov 23 '18 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.
– mature
Nov 23 '18 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.
– mature
Nov 23 '18 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.
– mature
Nov 23 '18 at 18:33
add a comment |
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.
add a comment |
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.
add a comment |
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.
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.
edited Nov 26 '18 at 21:24
answered Nov 23 '18 at 19:05
ZannaZanna
50.3k13133241
50.3k13133241
add a comment |
add a comment |
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
add a comment |
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
add a comment |
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
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
answered Nov 23 '18 at 20:27
dessertdessert
22.3k56198
22.3k56198
add a comment |
add a comment |
Open your directory in Nautilus.
Highlight all of the files.
Right-click, and select "Rename..." from the context menu.
On the Rename dialog, click the +Add button.
Select "1,2,3,4" under "Automatic Numbers"
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]"
Click the Rename button.
add a comment |
Open your directory in Nautilus.
Highlight all of the files.
Right-click, and select "Rename..." from the context menu.
On the Rename dialog, click the +Add button.
Select "1,2,3,4" under "Automatic Numbers"
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]"
Click the Rename button.
add a comment |
Open your directory in Nautilus.
Highlight all of the files.
Right-click, and select "Rename..." from the context menu.
On the Rename dialog, click the +Add button.
Select "1,2,3,4" under "Automatic Numbers"
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]"
Click the Rename button.
Open your directory in Nautilus.
Highlight all of the files.
Right-click, and select "Rename..." from the context menu.
On the Rename dialog, click the +Add button.
Select "1,2,3,4" under "Automatic Numbers"
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]"
Click the Rename button.
answered Nov 26 '18 at 22:13
PJ SinghPJ Singh
4,32022548
4,32022548
add a comment |
add a comment |
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
add a comment |
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
add a comment |
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
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
edited Nov 24 '18 at 14:43
answered Nov 24 '18 at 13:55
VijayVijay
1,5001618
1,5001618
add a comment |
add a comment |
pyrenamer is also a dead easy solution
Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
– Melebius
Nov 27 '18 at 8:25
add a comment |
pyrenamer is also a dead easy solution
Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
– Melebius
Nov 27 '18 at 8:25
add a comment |
pyrenamer is also a dead easy solution
pyrenamer is also a dead easy solution
answered Nov 26 '18 at 22:42
Carol McAnultyCarol McAnulty
472
472
Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
– Melebius
Nov 27 '18 at 8:25
add a comment |
Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
– Melebius
Nov 27 '18 at 8:25
Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
– Melebius
Nov 27 '18 at 8:25
Please don't just post some tool as an answer. Demonstrate how it solves the problem in the answer.
– Melebius
Nov 27 '18 at 8:25
add a comment |
Thanks for contributing an answer to Ask Ubuntu!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
@PerlDuck Yes, I have to enumarte them changing their name.
– paweljvn
Nov 23 '18 at 17:53
Related: askubuntu.com/q/839959
– Justin
Nov 24 '18 at 5:25