I have a folder structure like that: 'Pictures/2015/2015-01-02/random_name.jpg' and I want to rename the files to '2015-01-02 001.jpg', '2015-01-02 002.jpg' etc.

I'm not really familiar with bash programming and perl expressions, so any help is greatly appreciated! Thanks in advance

2 Answers 2

cd target_dir
dcomp="$(basename "$(pwd)")"
for file in *; do
    mv -v "$file" "$dcomp $(printf '%03d' "$count").$ext"
    (( count++ ))

This assumes you really want a space in the result filenames, which isn't a wonderful idea. You can, of course, change the pattern inside the loop to whatever you want. To do this to multiple directories, put the whole thing in a loop over them.


This is what you need ;)

 cd Pictures/2015/2015-01-02
 c=0 curdir=${PWD##*/} rename -n '
     s/.*/sprintf("%s %.03d.jpg", $ENV{curdir}, $ENV{c}++)/e' *jpg

Obviously, this is Perl's rename.

Remove -n switch after your tests (dry-run).


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .