2016-09-13 2 views
0

Я хотел бы сгруппировать похожие файлы в папки в одном каталоге. Чтобы лучше понять, я работаю над наборами изображений, где у меня есть изображения нескольких предметов с разными именами файлов. однако у меня будет 10-15 изображений на объект в наборе данных. Итак, скажем, у субъекта A будет 10 изображений, названных A_1.png, A_2.png, A_3.png и так далее. Итак, аналогично у нас есть n предметов. Мне нужно сгруппировать объекты в папках, имеющих все изображения, соответствующие этому предмету. Я попытался использовать python, но я не смог довести это до конца. Можем ли мы это сделать с помощью сценариев bash или shell? Если да, пожалуйста, сообщите.Группирование похожих файлов в папках

+0

Я видел это точно такой же вопрос, ранее сегодня , Что случилось с другим? –

+0

Ищите ключевое слово в имени файла. Если это есть, поместите его в соответствующую папку. Вы сделали бы это в python, используя 'if" A "в filename [i]: placeinFolderA'. Вы можете сортировать файлы в bash с помощью 'awk'. –

ответ

0

Пробуйте этот код. Я также поставил поддельный генератор файлов для тестирования.

Пруденциальный шаг: do rm только после того, как вы проверите все в порядке.

Возможное улучшение перемещение/переименование файлов вместо копирования и стирания

АБА в {1..5}; do touch SUBJA _ $ {aaa} .txt SUBJB _ $ {aaa} .txt SUBJC _ $ {aaa} .txt; сделано

для MYSUBJ в SUBJA SUBJB SUBJC

сделать

MKDIR $ MYSUBJ

ср $ MYSUBJ * .txt $ MYSUBJ/

гт $ MYSUBJ * .txt

сделано

+0

Спасибо за ваш ответ. Но можете ли вы быть более конкретным? Как я повторяю все файлы? У меня около 20000 имен файлов, имеющих 10 кластеризованных имен файлов для каждого объекта. Поэтому я должен повторять итерацию в 2000 раз. – Praveen

+0

Я думаю, что sanwill http://stackoverflow.com/users/6828349/sanwill ответит на ваш вопрос красиво! –

1

Я хотел бы предложить это по сценарию Shell, предположим, что у меня есть A_1.png, A_2.png, A_3.png, B_1.png, B_2.png в рабочем каталоге. На первом цикле я использую «_», как deliminator и на 2-ом цикле я использую «A/B_», как deliminator:

for _DIR in `ls -1 | grep png | awk -F"_" '{print $1}' | uniq`; 
do 
    mkdir $_DIR; 
    for _FILE in `ls -1 | grep $_DIR\_`; 
    do 
    cp $_FILE $_DIR/; 
    done; 
    find $_DIR; 
done; 

Например:

A 
A/A_1.png 
A/A_2.png 
A/A_3.png 
B 
B/B_1.png 
B/B_2.png 
+0

Большое спасибо @sanwill. Я довольно новичок в awk. Havent провел все испытания на этом. Будет держать вас в курсе. – Praveen