bashy ответ, специфичный для шаблона имени "xxx - yyyy.ddd" ..
find -type f | while read flnm ; do basename "$flnm" | awk -F'[\ .]' '{print $3 " " $2 " " $1 "."$4}'; done
Найдите файл и передайте имя циклу чтения while. Там используйте basename, чтобы извлечь имя и передать его Awk. Awk, используя несколько разделителей полей, пробел и точку, затем повторно печатает поля в желаемом порядке.
abcdef - ghijkl.pdf
становится
ghijkl - abcdef.pdf
практическим приложением ... переименовывать файлы в это новое имя шаблона
find -type f | while read flnm ; do mv "$(basename "$flnm")" "$(basename "$flnm" | awk -F'[\ .]' '{print $3 " " $2 " " $1 "."$4}')"; done
Единственное различие - включение команды mv и перенос имен в виде строк.
ls /path/to/your/buckets | awk -F_ '$3 >= 1488344400 && $3 <= 1497499200'
Обратите внимание :в общем случаене следует разбирать ls
, но так как мы знаем, что наши имена файлов не будут содержать специальных символов, у нас не должно возникнуть проблем в данном конкретном случае дело .
Что касается awk
:, мы просто определяем _
как разделитель полей и печатаем все строки, где третье поле («самое раннее время» согласно вам )находится между упомянутыми вами эпохами.
С Баш:
for f in db_[0-9]*_[0-9]*; do
e_time="${f:14:10}" # extracting 'earliest time'
if [ $e_time -ge 1488344400 ] && [ $e_time -le 1497499200 ]; then
echo "$f"
fi
done