Найдите разницу между двумя временами эпох, указанными в имени файла

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 и перенос имен в виде строк.

1
20.09.2017, 19:09
2 ответа
ls /path/to/your/buckets | awk -F_ '$3 >= 1488344400 && $3 <= 1497499200'

Обратите внимание :в общем случаене следует разбирать ls, но так как мы знаем, что наши имена файлов не будут содержать специальных символов, у нас не должно возникнуть проблем в данном конкретном случае дело .

Что касается awk:, мы просто определяем _как разделитель полей и печатаем все строки, где третье поле («самое раннее время» согласно вам )находится между упомянутыми вами эпохами.

1
27.01.2020, 23:24

С Баш:

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
0
27.01.2020, 23:24

Теги

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