2013-12-16 4 views
0

У меня есть папка, полная файлов с тем же именем, но с разными расширениями файлов. Например:Переместить группу файлов в новую папку, если их имена файлов, минус расширение, совпадают?

file-1.ai 
file-1.svg 
file-1.pdf 
file-2.ai 
file-2.svg 
file-2.txt 
file-3.ai 
file-3.svg 
example-1.pdf 
example-3.mov 

Есть ли способ в Linux (любой язык программирования будет делать), я могу переместить группу файлов в новую папку (либо новую папку для каждой группы файлов или все в одной папке), если их имена файлов, минус расширение, совпадения?

ответ

3

Think вы хотите что-то вроде этого.

#!/bin/bash 

dir="/somedir/" 
for i in "$dir"*; do 
    if [ -f "$i" ]; then 
    filename="${i%%.*}" 
    if [ ! -d "$filename" ]; then 
     mkdir "$filename" 
    fi 

    mv "$i" "$filename" 
    fi 

done 

e.g.

$ tree /somedir 
/somedir 
├── example-1.pdf 
├── example-3.mov 
├── file-1.ai 
├── file-1.pdf 
├── file-1.svg 
├── file-2.ai 
├── file-2.svg 
├── file-2.txt 
├── file-3.ai 
└── file-3.svg 

$ ./above_script 

$ tree /somedir 
/somedir 
├── example-1 
│   └── example-1.pdf 
├── example-3 
│   └── example-3.mov 
├── file-1 
│   ├── file-1.ai 
│   ├── file-1.pdf 
│   └── file-1.svg 
├── file-2 
│   ├── file-2.ai 
│   ├── file-2.svg 
│   └── file-2.txt 
└── file-3 
    ├── file-3.ai 
    └── file-3.svg 
+0

Спасибо! Это в основном делает то, что я хочу. – hellocatfood

1

Существует много способов сделать это. Одним из решений было бы просто использовать команду перемещения:

mv file-1.* /new/directory

Это переместит все файлы с именем file-1 независимо от расширения в новый каталог.

+0

Я расширил вопрос, чтобы указать, что файлы могут иметь разные имена вместо «file-». Не могли бы вы предоставить метод, который работает независимо от структуры имен файлов? – hellocatfood

+1

@hellocatfood Просто 'mv */new/directory /'? Хотя см. Мой ответ, если вы хотите сделать dirs с именами файлов. – BroSlow

+0

Если это так, вы бы сделали то же самое, что и 'mv example-1. */New/dir' –

1

Рассмотрим этот скрипт:

for i in *.*; do 
    d="${i%.*}" 
    [[ ! -d "$d" ]] && mkdir "$d" 
    cp "$i" "$d" 
done 
Смежные вопросы