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

У меня есть несколько файлов, названных таким:

KILN_SDUS51_N0SILN_201203020003
KILN_SDUS51_N0QILN_201203020003
KILN_SDUS51_N0RILN_201203020003

Я должен зарегистрировать всех их в папки на основе этих трех символов между _ и ILN (т.е. N0S,N0Q,N0R).

Я пытался записать сценарий удара, чтобы сделать это, но самые подобные примеры, я нашел соглашение с использованием f параметра %, который не кажется применимым в этом случае.

3
задан 6 May 2015 в 20:34

3 ответа

Что-то вроде этого должно сделать:

for file in ./*_???ILN*; do
    dir=${file%ILN*}
    dir=${dir##*_}
    mkdir -p "./$dir" &&
    mv -iv "$file" "./$dir"
done

См. FAQ 100 для больше на обработках строк в ударе.

7
ответ дан 1 December 2019 в 13:25

Используя grep:

#!/bin/bash
for file in ./KILN_SDUS51_*; do
    dir="$(grep -Po "^.*_.*_\K.*(?=ILN)" <<<"$file")"
    mkdir "$dir" && mv "$file" "$dir"
done
0
ответ дан 1 December 2019 в 13:25

В Python:

#!/usr/bin/env python3
import os
import shutil

dr = sys.argv[1]; files = os.listdir(dr)
for f in [f for f in files if os.path.isfile(dr+"/"+f)]:
    folder = dr+"/"+f.split("_")[2].replace("ILN", "")
    if not os.path.exists(folder):
        os.makedirs(folder)
    shutil.move(dr+"/"+f, folder+"/"+f)

Скопируйте его в пустой файл
Выполните его:

python3 <script> <directory>

Это создаст (sub) папку (папки) при необходимости, переместить файлы в папку (папки)

0
ответ дан 1 December 2019 в 13:25

Другие вопросы по тегам:

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