Движущиеся файлы в отсортированную папку на основе имени файла

Таким образом, у меня есть эта папка фильмов, которая похожа

Current
  movie1 (1962).mkv
  movie 2b (1993)
    movie 2b (1993) cd1.mp4
    movie 2b (1993) cd1.srt
  movie 3 (2019).avi
  movie 1942 (2012).mkv

И я хотел бы переместить их в другую папку, которая содержит структуру папок к году с правильными фильмами в каждой папке. Если существует подпапка как с фильмом 2b, я не возражаю той папки, разделен или сохранен - независимо от того, что легче, пока это входит в правильный год. Источник и место назначения находятся в том же разделе, таким образом, я использовал бы mv, чем rsync.

Sorted
  1962
  1993
  2012
  2019

Я добрался настолько далеко на основе другого вопроса/ответов на форуме, но я знаю, что это неправильно, потому что я не знаю, как разделить скобки с года, и я не знаю, как указать источник и папку назначения.

for f in *.*; do
        if [ -f "$f" ] # does file exist?
        then
                dir=$(echo "$f" | grep -o "([0-9][0-9][0-9][0-9])" | head -1) 
                if [ "$dir" ] # check if string found
                then
                        mkdir -p "$dir"  # create dir
                        mv "$f" "$dir"     # move file into new dir
                else
                        echo "INCORRECT FILE FORMAT: \""$f"\"" # print error if file format is unexpected
                fi
        fi
done

Какие-либо предложения?

0
задан 21 March 2020 в 16:23

1 ответ

Используя BASH_REMATCH к обратной ссылке соответствовал подвыражению:

#!/bin/bash

for i in movies/*; do
    if [[ $i =~ \(([0-9]{4})\) ]]; then
        mkdir -p year/${BASH_REMATCH[1]}
           mv -t year/${BASH_REMATCH[1]} "$i"
    else
        echo "Sort panic!"
    fi
done
1
ответ дан 7 April 2020 в 23:31

Другие вопросы по тегам:

Похожие вопросы: