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
我想给它添加一些特性以适应其他情况,但我不知道如何实现。
我想做的是:
当前名为 Episode1.mkv
的文件已重命名 SERIES.mkv
并移至 Downloaded/SERIES
。我想要做的是,如果文件夹是 SERIES - Breaking
,那么文件将被重命名为 Breaking.mkv
(所以没有 SERIES -
)。
目前它只将下载的文件移动到 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
我相信 .
我的这个脚本运行良好;它将下载重命名为其文件夹,然后将其移动到特定位置。
#!/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
我想给它添加一些特性以适应其他情况,但我不知道如何实现。
我想做的是:
当前名为
Episode1.mkv
的文件已重命名SERIES.mkv
并移至Downloaded/SERIES
。我想要做的是,如果文件夹是SERIES - Breaking
,那么文件将被重命名为Breaking.mkv
(所以没有SERIES -
)。目前它只将下载的文件移动到
[,则将其移动到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
我相信 .