arphex
arphex

Reputation: 180

Rename files with a suffix with name of its folder

Each folder has a .mkv or .avi file.

E.g:

Sommerferien201308/eins.avi
Sommerferien201309/eins.mkv
Herbst201401/film.avi
Herbst201402/krz.mkv

Renaming to:

Sommerferien201308/Sommerferien201308.avi
Sommerferien201309/Sommerferien201309.mkv
Herbst201401/Herbst201401.avi
Herbst201402/Herbst201402.mkv

How can I rename the filename to the name of its folder? Of course every foldername is unique. And too much to do it manually for each file/folder.

I Would try with find.

find . -type d -name "" -exec cd "" && mv {} \;

But i dont know how to select the folder name and how to make the .avi or .mkv selection and how to store the selected folder name..

Upvotes: 0

Views: 91

Answers (1)

anubhava
anubhava

Reputation: 784868

You can use this find command from base folder of your folders that contain *.avi and *.mkv files:

while IFS= read -rd '' f; do
(
   IFS=/
   arr=($f)
   if [[ $f != *"/${arr[len-2]}"* ]]; then
      len=${#arr[@]}
      ext="${arr[len-1]##*.}"
      cd "$(dirname "$f")" && echo mv "${arr[len-1]}" "${arr[len-2]}.$ext"
   fi
)
done < <(find . \( -name '*.mkv' -o -name '*.avi' \) -print0)

When you're satisfied with the output remove echo before mv.

Upvotes: 1

Related Questions