2016-03-01 2 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 - и Downloaded/MOVIES, если ее папка была 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 

EDIT: OP был заинтересован в переходе от …/SERIES - BlahBlah/blah.ext к …/SERIES/BlahBlah-blah.extЯ считаю.

+0

Но возможно ли это сделать только с одним скриптом? Мне нужно, что это можно запустить автоматически после определенного события. – DylanDog

+1

Это _one_ script: https://gist.github.com/sukima/6b5e799d8f6811885cf0 Я сейчас очень смущен. – Sukima

+0

Извините, я неправильно понял. Теперь я тестировал его, и он работает: он перемещает файл в зависимости от имени папки, но есть две проблемы: во-первых, это работает, только если папка «SERIES» или «MOVIES», а не, например, SERIES - ExampleName'; второй заключается в том, что он не переименовывает файл внутри, а только перемещается. – DylanDog

Смежные вопросы