使用名称为

时间:2017-03-05 10:05:43

标签: bash

每个文件夹都有.mkv.avi个文件。

E.g:

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

重命名为:

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

如何将文件名重命名为其文件夹的名称?  当然每个foldername都是独一无二的。并且每个文件/文件夹都需要手动执行。

我会尝试使用find。

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

但我不知道如何选择文件夹名称以及如何选择.avi或.mkv以及如何存储所选文件夹名称。

1 个答案:

答案 0 :(得分:1)

您可以在包含find*.avi个文件的文件夹的基本文件夹中使用此*.mkv命令:

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)

如果您对输出感到满意,请在echo之前删除mv