2016-03-01 129 views
-1

我有這個腳本工作正常;它將下載重命名爲其文件夾,然後將其移至特定位置。BASH - 自動將文件重命名爲其文件夾

#!/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 -),如果文件夾是MOVIES -,則將文件移動到Downloaded/MOVIES

有人可以幫我嗎?

+0

您可能想使用'awk'來處理文件名 –

+0

可以給我一個例子嗎? – DylanDog

+0

'renamedpath = $(echo $ filename | awk' ...')' –

回答

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我相信會的興趣。

+0

但是隻有一個腳本可以做到這一點嗎?我需要可以在特定事件後自動運行。 – DylanDog

+1

這是_one_腳本:https://gist.github.com/sukima/6b5e799d8f6811885cf0我現在很困惑。 – Sukima

+0

對不起,我誤解了。現在,我測試了它,它的工作原理是:它根據文件夾名稱移動文件,但有兩個問題:第一個是它只在文件夾是「SERIES」或「MOVIES」時才起作用,例如, SERIES - ExampleName';第二個是它不重命名文件裏面,但它只能移動。 – DylanDog