#1 14.02.2015 07:03:57

fizik_ku
Administrator
Зарегистрирован: 14.02.2015
Сообщений: 2
IP-адрес

Передвижение файлов

Сразу скажу, что являюсь ученым и никогда ранее в linux не работал.Но вот по работе понадобилось, поэтому не бейте больно за вопрос.
Существует проблема:
Есть каталог и в нем лежат папки с именами от 00000 до 1000000 с шагом 10000, т.е. папки с именами 00000,10000,20000,...,1000000.В этих папках лежат файлы file1.название папки,file2.название папки,file3.название папки. Эти файлы нужно переместить соответсвенно в папки A,B,C, которые лежат в тот же каталог, что и папки с именами 00000 до 1000000.
Возможно ли это вообще?И если возможно как это сделать?
Если так не возможно, то можно ли переместить файлы не в папки A,B,C а в тот каталог в котором лежат папки 00000 до 1000000?

#2 14.02.2015 07:14:57

Vascom
Administrator
Зарегистрирован: 02.04.2010
Сообщений: 4 019
IP-адрес

Передвижение файлов

Всё это возможно.
Я бы подсказал, если бы было понятнее что и куда перемещать. Например каталогов с числами в названии у тебя 100 штук, ты из них файлы хочешь переместить в каталоги с латинскими буквами, но таких букв всего 26 в алфавите. Что делать с остальными?

#3 14.02.2015 15:05:57

xxblx
Administrator
Зарегистрирован: 14.05.2011
Сообщений: 3 381
IP-адрес

Передвижение файлов

Правильно ли я понял структуру?

Локальный корень (условно, каталог в котором все остальные) обзовем просто "Корень"

- Корень
    - 00000
        - file1.00000
        - file2.00000
    - 10000
        - file1.10000
        - file2.10000
    - A
    - B


Если так, то переместить Корень/00000/file1.00000 в Корень/A можно так
[console]# если находим в каталоге "Корень"
mv 00000/file1.00000 A/file1.00000

# если находим в каталоге 00000
mv file1.00000 ../A/file1.00000[/console]

Автоматизировать можно как-то так, если запускать из "корня"
#!/bin/bash

for item in 00000_A 10000_B # и т.д. 
do
    cur=`echo "${item}" | cut -d "_" -f1`
    dest=`echo "${item}" | cut -d "_" -f2`
    mv "${cur}/*.${cur}" "${dest}"
done

У 00000_A получится cur 00000 и dest A соответственно, после выполнится mv 00000/*.00000 (т.е. по маске переместит все подходящие файлы- file1.00000, file2.00000 и т.д.) в A.
Ну и т.д.

#4 14.02.2015 15:20:33

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

Передвижение файлов

Мы создаём себе проблемы (хотя бы с именами и "шагом 10000", а потом - "героически их преодалеваем..." :(
xxblx
Он хочет "однострок", чтобы всё и сразу... Ещё и сортировку... Не выйдет?

#5 14.02.2015 15:33:02

xxblx
Administrator
Зарегистрирован: 14.05.2011
Сообщений: 3 381
IP-адрес

Передвижение файлов

Quote by mvt
Не выйдет?

Выйдет всё при наличии конкретной информации о входных данных. По имеющейся информации я дал достаточно точное направление для пробы.

#6 14.02.2015 15:41:27

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

Передвижение файлов

Quote by mvt
Не выйдет?

Выйдет всё при наличии конкретной информации о входных данных. По имеющейся информации я дал достаточно точное направление для пробы.

У меня есть тоже версия :) Но, подождём ТС? :)

#7 14.02.2015 17:17:41

gramozeka
Administrator
Зарегистрирован: 03.05.2010
Сообщений: 1 868
IP-адрес

Передвижение файлов

Quote by mvt
Он хочет "однострок", чтобы всё и сразу... Ещё и сортировку... Не выйдет?

в последнее время таких стало появляться все больше и больше, странно всё это. Или это какая-то генерация "смутного времени" которая таки подросла и осилила кнопки на клавиатуре?

А по теме, то что ТС хочет рассортировать кучу файлов в куче каталогов по какому-то алгоритму это понятно, но мысли он свои выразил как-то очень не очень..

#8 14.02.2015 17:25:02

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

Передвижение файлов

gramozeka
Тут, мне кажется, человек э... не фонтазирует. Он написал "являюсь ученым и никогда ранее в linux не работал". А учёные - категория смутная. Может, он - филолог? Или доктор. Какой там, нафиг, Linux? Если придёт - вежливый допрос :) Хорошо? :)

#9 14.02.2015 17:34:56

gramozeka
Administrator
Зарегистрирован: 03.05.2010
Сообщений: 1 868
IP-адрес

Передвижение файлов

mvt, та не вопрос, но мысли, для учёного, он выражает весьма сумбурно. В любом случае ждем, там на баше в десяток строк уложить можно, главное понять задачу.
вопрос к ТС - готов ли он поделиться непосильно нажитым презренным металлом за готовое решение, или предпочитает помучиться и самостоятельно решить данную проблему изучив пару-тройку руководств коих в интернете как грязи?

#10 14.02.2015 17:48:05

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

Передвижение файлов

mvt, та не вопрос, но мысли, для учёного, он выражает весьма сумбурно. В любом случае ждем, там на баше в десяток строк уложить можно, главное понять задачу.

Дык, задача понятна. Как обычно, всё сваляно вместе. Десяток (или сто?) папок в одном каталоге. Тетерь хочется как-то их упорядочнить. (дали, наверное новый раздел). Создаём каталоги A, B, C и сортируем "то, что было". Непонятоно, правда, по какому признаку сортируем (куда что класть? ) И имена - будем менять?
PS Вопрос не ко мне, ждём ТС :(

#11 14.02.2015 17:51:05

gramozeka
Administrator
Зарегистрирован: 03.05.2010
Сообщений: 1 868
IP-адрес

Передвижение файлов

Quote by mvt
Непонятоно, правда, по какому признаку сортируем (куда что класть? ) И имена - будем менять?
PS Вопрос не ко мне, ждём ТС ac

насчет сумбурности я именно об этом. А где что лежит значения не имеет. Поиск и сортировку можно организовать и глобально, хоть с самого корня ФС.

#12 14.02.2015 17:57:34

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

Передвижение файлов

Quote by mvt
Непонятоно, правда, по какому признаку сортируем (куда что класть? ) И имена - будем менять?
PS Вопрос не ко мне, ждём ТС ac

насчет сумбурности я именно об этом. А где что лежит значения не имеет. Поиск и сортировку можно организовать и глобально, хоть с самого корня ФС.

Ну да. Там нет задач "с корня". Всё в одном каталоге. Но, нафига каталоги A, B, С ? Надо всё рассовывать "по местам"? А Вы знаете критерии? А вот хотелось бы, чтобы ТС более подробно обозначил задачу. Нет?

#13 14.02.2015 18:18:57

mvt
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 6 467
IP-адрес

Передвижение файлов

gramozeka
что всегда убивает? Неправильно поставленная задача. Если дали новый пустой раздел - нельзя создать на нём каталог и сделать на него ссылку в действующий? И, "по умолчанию" всё пойдёт на новый"? Это - решение вопроса?
А реально - человек всегда опирается на свои знания. И нужен опыт (и буквари) для того чтобы это всё несколько расширить. А напишите на эту тему просто статью. Мы здесь - нафига собрались?
PS А я - Вас тоже почитаю, мне - тоже всё это - интересно...

#14 14.02.2015 20:33:05

gramozeka
Administrator
Зарегистрирован: 03.05.2010
Сообщений: 1 868
IP-адрес

Передвижение файлов

Quote by mvt
А напишите на эту тему просто статью. Мы здесь - нафига собрались?

А смысл ? инет просто забит подобным писательством, да и "чукча не писатель - чукча читатель" :D , писать это куча времени, которого и так вечно не хватает, а на работе не до писательства - работать надо, заказов набрали уже на июнь. Для меня тема linux это чистой воды моя личная придурь, так чтоб не сторчаться от скуки. На работе я что-то среднее между разнорабочим и дворником с репутацией "если какие-то проблемы с компами спроси у него он должен знать, если сломалось что-то в цехе(из оборудования) иди к нему - он починит и т.д." за это и держат пока.

А проблема ТС решаема многими средствами, на том же баше, но нужна четко поставленная задача, ясные условия и ессно интерес. При желании, не вникая в тонкости, можно нагуглить решение в течении дня.
вот наколеночный вариант(как пример, должен работать, не проверял)

#!/bin/sh
CWD=$(pwd)
find -type d | while read DIRNAME; do
cd $DIRNAME
find -type f | while read FILENAME; do
# здесь что-то с файлами делаем например:
mv /абсолютный_путь_к_целевой_директории $FILENAME
echo "$FILENAME перемещён"
done
cd $CWD
echo "$DIRNAME очищена"
done

#15 14.02.2015 20:37:32

fizik_ku
Administrator
Зарегистрирован: 14.02.2015
Сообщений: 2
IP-адрес

Передвижение файлов

Ох тут понаписали.Пока меня пол дня не было.Я не шум никакой.Я правда по науке вынужден этим всем заниматься.
Может сумбурно написал, но как получилось.Вообщем постараюсь переформулировать:
есть каталог в котором лежат папки с именами 00000,10000,20000 и т.д.(через 10000):
.../00000,.../10000.
В каждой из эти папок лежат файлы file1.название папки,file2.название папки,file3.название папки.Т.е. например:
.../00000/file1.00000
.../00000/file2.00000
.../00000/file3.00000
Файлы file1 нужно забрать из этих папок и переместить в папку A лежащую в этом же каталоге что и изначальные папки.Т.е. например:
.../A
В папки B,C нужно переместить соответсвенно file2,file3.Т.е. чтобы стало например
.../A/file1.00000
.../B/file2.00000
.../C/file3.00000
И да я честно пытался про команду mv читать, но не понял как это организовать.Эксперименты глупые не могу проводить.Можно потерять важные файлы.Поэтому специально зарегистрировался и решил спросить знающих людей.

#16 14.02.2015 20:48:40

1000Mhz
Administrator
Зарегистрирован: 17.08.2014
Сообщений: 816
IP-адрес

Передвижение файлов

Все можно, но ТЗ никуда не годное)) Нужен вывод например команды tree - "вместо тысячи слов" :)

#17 14.02.2015 21:16:14

gramozeka
Administrator
Зарегистрирован: 03.05.2010
Сообщений: 1 868
IP-адрес

Передвижение файлов

Quote by fizik_ku
И да я честно пытался про команду mv читать, но не понял как это организовать.Эксперименты глупые не могу проводить.Можно потерять важные файлы.Поэтому специально зарегистрировался и решил спросить знающих людей.

смотри мой предыдущий пост. Скопируй код, создай текстовый файл в редакторе, к примеру kwrite, вставь туда код, сохрани, ПКМ по этому файлу>Свойства>Права>Сделать исполняемым. Помести его в каталог в котором лежат папки с именами 00000,10000,20000... Каталоги A,B,C должны быть выше чем начальный, либо нужно добавить проверку в первый цикл(чтоб скрипт не лез в них) и запусти из командной строки.
Вот вариант с проверкой:

#!/bin/bash
CWD=$(pwd)
find -type d | while read DIRNAME; do
if [ ${DIRNAME} == "A" ] || [ ${DIRNAME} == "B" ] || [ ${DIRNAME} == "C" ] || [ ${DIRNAME} == "." ]
then continue
fi
cd $DIRNAME
find -type f | while read FILENAME; do
if [[ $FILENAME =~ "file1" ]]
then mv -f $FILENAME $CWD/A 2> /dev/null
fi
if [[ $FILENAME =~ "file2" ]]
then mv -f $FILENAME $CWD/B 2> /dev/null
fi
if [[ $FILENAME =~ "file3" ]] 
then mv -f $FILENAME $CWD/C 2> /dev/null
fi
done
cd $CWD
done


Это должно работать, но перед экспериментами сделай бекап, это априори.

#18 14.02.2015 21:32:53

gramozeka
Administrator
Зарегистрирован: 03.05.2010
Сообщений: 1 868
IP-адрес

Передвижение файлов

не работает *DONT_KNOW*

P.S. алкоголь суть зло :[
вот так работает:


#!/bin/bash
CWD=$(pwd)
find -type d | while read DIRNAME; do
if [ ${DIRNAME} == "./A" ] || [ ${DIRNAME} == "./B" ] || [ ${DIRNAME} == "./C" ] || [ ${DIRNAME} == "." ]
then continue
fi
cd $DIRNAME
find -type f | while read FILENAME; do
if [[ $FILENAME =~ "file1" ]]
then mv -f $FILENAME $CWD/A 2> /dev/null
fi
if [[ $FILENAME =~ "file2" ]]
then mv -f $FILENAME $CWD/B 2> /dev/null
fi
if [[ $FILENAME =~ "file3" ]] 
then mv -f $FILENAME $CWD/C 2> /dev/null
fi
done
cd $CWD
done

P.S. пробел забыл поставить.

#19 16.02.2015 12:53:37

gramozeka
Administrator
Зарегистрирован: 03.05.2010
Сообщений: 1 868
IP-адрес

Передвижение файлов

ТС решил проблему?

#20 16.02.2015 14:57:51

xxblx
Administrator
Зарегистрирован: 14.05.2011
Сообщений: 3 381
IP-адрес

Передвижение файлов

#!/bin/bash

LETTERS="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

# Проходим по всем каталогам в текущем каталоге
for item in ${PWD}/*
do
    # Пропускаем каталоги с именами A, B и т.д. 
    test_res=`expr match "${LETTERS}" ".*$(basename ${item})"`
    if (( "${test_res}" > 0 )); then
        continue 
    fi

    # Проверяем пустой ли каталог
    lsitem=`ls ${item}`
    
    # Если каталог не пустой
    if [ -d "${item}" -a -n "${lsitem}" ]; then
        # Обходим по очереди каждый файл
        for f in ${item}/*
        do
            # Дергаем цифру из названия и выбираем каталог с буквой
            N=`echo "$(basename ${f})" | grep -oE "[0-9]*" -c1`
            L="${LETTERS:N-1:1}"
            
            # Перемещаем
            mv "${f}" "${PWD}/${L}"
            echo "Moved: ${f} -> ${PWD}/${L}/$(basename ${f})"
        done
    fi
done

Board footer