Вот решение bash
, которое проходит через файлы, перемещая те, которые соответствуют компоненту yyyymm
(для значения гггг
в диапазоне 2000-2099):
months=('' January February March April May June July August September October November December)
for f in 20[0-9][0-9][0-3][0-9]*
do
year=$(echo "$f" | grep -Po '^20\d\d') # Extract the four digit year, 20nn
mm=$(echo "$f" | grep -Po '^(?<=20\d\d)\d\d') # Find the two digit month number 01-12
month=${months[$mm]} # Convert to a month name
test -n "$year" -a -n "$month" && echo mv "$f" "$yyyy/$month/$f"
done
Удалите префикс echo
из mv
, когда будете готовы к работе.
Если вы знаете, что все файлы начинаются с 2016
, вы можете несколько упростить обработку:
for f in 2016[0-3][0-9]*
do
mm=$(echo "$f" | grep -Po '^(?<=2016)\d\d') # Find the two digit month number 01-12
month=${months[$mm]} # Convert to a month name
test -n "$month" && echo mv "$f" "2016/$month/$f"
done