2015-06-07 2 views
1

У меня есть имена файлов, которые всегда начинаются с YM (например, 2014-01) Все файлы прямо сейчас находятся в одном каталоге, И я хочу разбить их на каталог с корневым годом (2014) и подкаталоги по месяцам (01,02 и т.д ..)Сортировка файлов в каталогах по дате и имени файла

Это то, что я делал до сих пор вручную:

find /dirlocation/ -name "2014-12*" -type f -exec mv {} /pathtocp/2014/12 \; 

и я хотел бы изменить дату и ср каталог вручную каждый раз ..

Может кто-нибудь, пожалуйста, помогите мне с сценарий bash для того, чтобы это произошло автоматически?

Спасибо!

+2

попробуйте использовать цикл for в скрипте bash. Каждый год, который у вас есть, пробегает все месяцы. –

+0

У месяцев до октября есть ведущий 0? После месяца появляется еще одна тире или начинается другой текст? –

+0

Привет, Майк, да, месяцы начинаются с ведущего 0. после месяца появляется еще одна цифра даты (т.е. 2014-12-21) – Linuxer

ответ

1

Другое решение:

#!/bin/bash 
for f in $(find . -type f -regextype posix-extended -regex "./[0-9]{4}-[0-9]{2}.*"); do 
    y=${f:2:4} 
    m=${f:7:2} 
    mkdir -p "$y/$m" && mv "$f" "$y/$m/$f" 
done 

Предположения:

  • Скрипт Баш запускается с пути файлы находятся в
+0

Так как он также охватывает тот факт, что каталог назначения теперь может существовать и устойчив к будущим годам, это то, к чему я решил пойти. Большое спасибо! – Linuxer

1

Try работает:

for i in 2014 2015; do 
    for j in `seq 1 12`; do 
    j=`printf %.2d $j`   #to convert 1 to 01 
    find /dirlocation/ -name "$i-$j*" -type f -exec mv{} /pathtocp/$i/$j \; #assuming this sentence is correctly written in question. 
    done; 
done; 
+0

Здравствуйте, Rkholiya, спасибо за редактирование! Я дам ему попробовать и обновить – Linuxer

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