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

时间:2016-03-01 13:16:22

标签: bash download directory sh rename

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

#!/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。我想要做的是,如果文件的文件夹为Downloaded/SERIES,文件会移至SERIES -,如果文件夹为Downloaded/MOVIES,则会移至MOVIES -

  3. 是的,有人能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

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

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

rename_category() {
  for path in "Downloads/${1}"*; do
    rename_files "$path" "$1"
  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 我相信

相关问题