Сортировка файлов из одной папки в разные папки по датам

Автор: Jaivan Дата: 29.01.2009 12:10 Здравствуйте!
Необходимо написать достаточно простой скрипт в bash, суть в следующем: имеется директория с файлами, которые записываются в формате <год-месяц-день-часы:минуты>.<расширение>, например:
2009-01-01-12:00
2009-01-01-13:00
2009-01-02-12:00
2009-01-02-13:00
2009-01-03-12:00
2009-01-03-13:00
нужно эти файлы отсортировать в директории по датам создания, т. е. 2009-01-01, 2009-01-02, 2009-01-03 и тд. Начальная и конечная директории (в которой поддиректории находятся) задаются в качестве аргументов. Помогите пожалуйста начать реализацию в правильном направлении, чтобы в лес за дровами не ходить ))) Заранее спасибо!
Re: Сортировка файлов из одной папки в разные папки по датам 29.01.2009 21:09peter_ir Список файлов для данной даты можно получить командой ls с маской: ls yyyy-mm-dd-*,
выделить первые три поля можно с помощью awk, но это из tcsh
set fl1 = ""
set fl2 = ""
set fl3 = ""
set fld = `echo <имя_файла> | awk -F "-" '{printf("%s %s %s ",$1,$2,$3)}' `
@ fl1 = $fld[1]
@ fl2 = $fld[2]
@ fl3 = $fld[3]
дальше из этих переменных можно составить имя, какое нужно.
Re: Сортировка файлов из одной папки в разные папки по датам 27.02.2009 08:58Bircoph Если файлы идут строго в формате:
2009-01-01-12:00

Я бы сделал так (для сортировки всех файлов):
#!/bin/bash
for i in $( find -type f ); do
    mv $i ${i:0:10}
done

Я пользуюсь совпадением имени директории с первыми 10 символами имени файла.

Если директории нужно предварительно создать, то mkdir Вам в помощь:
find -type f | cut -b -10 | sort -u | xargs mkdir


Если операцию нужно выполнить только для диапазона значений (лично мне необходимость такой функциональности представляется сомнительной), то есть два способа:
1) Разбирать в цикле имя каждого файла через gawk, как показал Пётр, и на его основе принимать решение.
2) Дополнить "find -type f" унифицирующей сортировкой и отбором по значению.

P.S. Вместо gawk можно использовать встроенные функции bash, быстрее будет (вообще, всегда лучше минимизировать число запусков внешних программ):
year=${name:0:4}
month=${name:5:2}
day=${name:8:2}
RSS-материал