2015-10-14 1 views
0

Как я могу переместить группу файлов, которые разделяют первые 9 символов названия файлов для создаваемых папок с тем же именем, 9 символовперемещать файлы в новые папки с тем же именем, что и файл?

example 

    I have a folder containing number of files with various names each 
    group of files begin with same 9 characters ex: 

    first group [HD9523587_352, HD9523587_258, HD9523587_785 ,HD9523587_473] 
    second group[Hip046329_258, Hip046329_364, Hip046329_681, Hip046329_235] 

    and so on 

мне нужно создавать новые папки с теми же 9 символов каждой группы , затем переместите файлы каждой группы в эти папки. thanks

ответ

7

Просто извлеките первые 9 символов для использования в качестве имени каталога. В bash, самый простой способ сделать это - использовать регулярное выражение , соответствующее расширению подстроки параметра.

for f in *; do 
    # [[ $f =~ ^(.{9}) ]] 
    # dir=${BASH_REMATCH[1]} 
    dir=${f:0:9} 
    mkdir -p "$dir" && mv "$f" "$dir" 
done 
+1

В Bash простейший способ сделать это - использовать разложения параметров: 'dir = $ {f: 0: 9}'. Обратите внимание, что с регулярным выражением, если длина имени файла меньше 9, 'BASH_REMATCH' будет пустым (так вы получите сообщение об ошибке с' mkdir'). –

+1

Согласовано, это гораздо лучшее решение. – chepner

+0

Что делает $ {f: 0: 9}? – ergonaut