BASH - 自动将文件重命名为其文件夹

BASH - Automatically rename file as its folder

我的这个脚本运行良好;它将下载重命名为其文件夹,然后将其移动到特定位置。

#!/bin/bash
shopt -s nullglob
for filename in /User/Downloads/{SERIES,MOVIES}/*.{mkv,avi,mp4}; do
    new_path="$(dirname $filename).${filename##*.}"
    new_path="${new_path/Downloads/Downloaded/SERIES}"
    echo "moving $filename -> $new_path"
    mv "$filename" "$new_path" 
done

我想给它添加一些特性以适应其他情况,但我不知道如何实现。

我想做的是:

  1. 当前名为 Episode1.mkv 的文件已重命名 SERIES.mkv 并移至 Downloaded/SERIES。我想要做的是,如果文件夹是 SERIES - Breaking,那么文件将被重命名为 Breaking.mkv(所以没有 SERIES -)。

  2. 目前它只将下载的文件移动到 Downloaded/SERIES。我想要做的是,如果文件的文件夹是 SERIES -,则将其移动到 Downloaded/SERIES,如果其文件夹是 MOVIES -.

    [,则将其移动到 Downloaded/MOVIES

有人可以帮助我吗?

如何将其分解为您可以在每种类型上调用的函数:

rename_files() {
  title="${1##* - }"
  for filename in "/"*.*; do
    case "${filename##*.}" in
      mkv|avi|mp4)
        new_path="Downloaded//${title}-$(basename "$filename")"
        echo "moving $filename -> $new_path"
        mv "$filename" "$new_path"
        ;;
    esac
  done
}

rename_category() {
  for path in "Downloads/"*; do
    rename_files "$path" ""
  done
}

然后根据需要简单地调用它:

rename_category SERIES
rename_category MOVIES

作为一个例子,我从这个开始:

.
├── Downloaded
│   ├── MOVIES
│   └── SERIES
├── Downloads
│   ├── MOVIES\ -\ bar
│   │   ├── bar.mp4
│   │   └── foo.mp4
│   ├── MOVIES\ -\ foo
│   │   ├── bar.mp4
│   │   └── foo.mp4
│   ├── SERIES\ -\ bar
│   │   ├── bar.mp4
│   │   └── foo.mp4
│   └── SERIES\ -\ foo
│       ├── bar.mp4
│       └── foo.mp4
├── after.txt
├── before.txt
└── rename_script.sh

8 directories, 11 files

running the script之后我得到:

moving Downloads/SERIES - bar/bar.mp4 -> Downloaded/SERIES/bar-bar.mp4
moving Downloads/SERIES - bar/foo.mp4 -> Downloaded/SERIES/bar-foo.mp4
moving Downloads/SERIES - foo/bar.mp4 -> Downloaded/SERIES/foo-bar.mp4
moving Downloads/SERIES - foo/foo.mp4 -> Downloaded/SERIES/foo-foo.mp4
moving Downloads/MOVIES - bar/bar.mp4 -> Downloaded/MOVIES/bar-bar.mp4
moving Downloads/MOVIES - bar/foo.mp4 -> Downloaded/MOVIES/bar-foo.mp4
moving Downloads/MOVIES - foo/bar.mp4 -> Downloaded/MOVIES/foo-bar.mp4
moving Downloads/MOVIES - foo/foo.mp4 -> Downloaded/MOVIES/foo-foo.mp4

.
├── Downloaded
│   ├── MOVIES
│   │   ├── bar-bar.mp4
│   │   ├── bar-foo.mp4
│   │   ├── foo-bar.mp4
│   │   └── foo-foo.mp4
│   └── SERIES
│       ├── bar-bar.mp4
│       ├── bar-foo.mp4
│       ├── foo-bar.mp4
│       └── foo-foo.mp4
├── Downloads
│   ├── MOVIES\ -\ bar
│   ├── MOVIES\ -\ foo
│   ├── SERIES\ -\ bar
│   └── SERIES\ -\ foo
├── after.txt
├── before.txt
└── rename_script.sh

8 directories, 11 files

编辑:OP 有兴趣从 …/SERIES - BlahBlah/blah.ext…/SERIES/BlahBlah-blah.ext 我相信 .