У меня есть несколько файлов, названных таким:
KILN_SDUS51_N0SILN_201203020003
KILN_SDUS51_N0QILN_201203020003
KILN_SDUS51_N0RILN_201203020003
Я должен зарегистрировать всех их в папки на основе этих трех символов между _
и ILN
(т.е. N0S
,N0Q
,N0R
).
Я пытался записать сценарий удара, чтобы сделать это, но самые подобные примеры, я нашел соглашение с использованием f параметра %, который не кажется применимым в этом случае.
Что-то вроде этого должно сделать:
for file in ./*_???ILN*; do
dir=${file%ILN*}
dir=${dir##*_}
mkdir -p "./$dir" &&
mv -iv "$file" "./$dir"
done
См. FAQ 100 для больше на обработках строк в ударе.
Используя grep
:
#!/bin/bash
for file in ./KILN_SDUS51_*; do
dir="$(grep -Po "^.*_.*_\K.*(?=ILN)" <<<"$file")"
mkdir "$dir" && mv "$file" "$dir"
done
В 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) папку (папки) при необходимости, переместить файлы в папку (папки)