Упорядочить файл на основе информации о месяце в имени файла - PullRequest
0 голосов
/ 04 августа 2020

У меня есть папка, содержащая данные о ежедневных осадках в формате geotiff с 1981-2019 гг. С условным обозначением chirps-v2.0.yyyymmdd.1days.tif

Я хотел бы расположить все файлы на основе информации о МЕСЯЦЕ и переместить в новую папку, ie все файлы с Month = January переместятся в папку Month01.

Есть ли для этого какое-нибудь однострочное решение, я использую терминал на macos.

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Это должно сработать:

for i in $(seq -f "%02g" 1 12); do mkdir -p "Month$i"; mv chirps-v2.0.????$i*.tif "Month$i"; done

Объяснение:

  • Для каждого числа в диапазоне 1, 12 (при необходимости дополнить 0) ...
  • Сделайте каталоги Month01, Month02, et c. Если каталог уже существует, продолжите.
  • Переместите все файлы, которые включают номер текущего месяца в соответствующей части имени файла, в соответствующую папку. Знаки вопроса в chirps-v2.0.????$i*.tif представляют собой односимвольные символы подстановки.

Примечание. Если есть вероятность, что в именах файлов .tif будут пробелы, вы можете использовать вместо них "chirps-v2.0."????"$i"*".tif".

0 голосов
/ 04 августа 2020

Я не думаю, что есть простой способ сделать это. Однако вы можете сделать «однострочное» решение, если используете конвейеры и циклы for, например:

for file in $(ls *.tif); do sed -r 's/(.*\.[0-9]{4})([0-9]{2})(.*)/\1 \2 \3/' <<< "$file" | awk '{print "mkdir -p dstDir/Month" $2 "; cp", $1 $2 $3, "dstDir/Month" $2}' | bash ; done

Немного форматирования:

for file in $(ls *.tif); do \
    sed -r 's/(.*\.[0-9]{4})([0-9]{2})(.*)/\1 \2 \3/' <<< "$file" \
    | awk '{print "mkdir -p dstDir/Month" $2 "; cp", $1 $2 $3, "dstDir/Month" $2}' \
    | bash 
done

Это требует для выполнения из каталога, содержащего ваши файлы (см. "ls * .tif). Вам также потребуется заменить" dstDir "на имя родительского каталога, в котором будет создан" Month01 ".

Это может не идеально, но вы можете отредактировать его, если требуется. Кроме того, если у вас нет bash, только zsh, замените бит «bash» на «zsh», все равно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...