Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 5

Как собрать файлы из подкаталогов в один каталог, переименовав одинаковые?

12.03.2013, 21:28. Показов 5254. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
—Здр.Все!
—Нужен скрипт или просто команда для терминала.
—Задача собрать файлы в одну директорию из директории с поддериекториями при этом файлы с одинаковыми именами должны быль переименованы. Можно чтобы все файлы были переименованы лишь бы не были удалены файлы с одинаковыми именами.
—Из найденного подошло бы вот это,
Bash
1
find /path -type f -exec mv {} /path2 \;
но удаляет файлы с одинковыми именами.
—Вот так хорошо дополняет,
Bash
1
for i in `find ./ -type f`;do  mv $i $(echo `dirname $i`/`date +%F`+`basename $i`);done
но не знаю как сделать, чтобы пронумеровало положим все файлы.
—Вот здесь нумерует(переименовывает),
Bash
1
i= ; ls | while read; do mv "$REPLY" $((++i))".${REPLY//*.}"; done
но не рекурсивно, только в одной директории в поддерикториях не работает.
—Попытался по-мичурински соединить
Bash
1
for i in `find ./ -type f`;do mv "$REPLY" $((++i))".${REPLY//*.}"; done
не хочет работать.
—Что не так в последней строке как сделать чтобы переименовывало файлы в директории и поддерикториях?
—Вот такие ещё были советы
Bash
1
find "$SRC_DIR" -type f -exec bash -c 'mv -i {} "$DST_DIR/$RANDOM.$(basename {})"' \;
По вкусу
Bash
1
... -exec bash -c '...' \;
можно заменить на
Bash
1
... | while read FILE ; do ... "$FILE" ... ; done
но не заработало...
—Полагаю файлы нужно сначала переименовать в директории и всех поддерикториях, а затем их можно переместить в одну папку, неважно где расположенную. Если файлы будут иметь разные имена они не будут удалены.
—Я не программист, сделать это самостоятельно не получается, помогите пожалуйста!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.03.2013, 21:28
Ответы с готовыми решениями:

Переместить все файлы из всех подкаталогов в текущий каталог и удалить подкаталоги, если у них нет своих подкаталогов
Переместить все файлы из всех подкаталогов в текущий каталог и удалить подкаталоги, если у них нет своих подкаталогов

Скопировать только файлы из подкаталогов по пути c:\dir\ в каталог c:\1
Добрый день. В виду отсутствия информации в поиске, прошу помочь с вопросом по batch. Скопировать только файлы из подкаталогов по...

Переместить все файлы из всех подкаталогов в текущий каталог и удалить пустые подкаталоги
Переместить все файлы из всех подкаталогов в текущий каталог и удалить подкаталоги, если у них нет своих подкаталогов

11
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.03.2013, 00:31
нужно писать скрипт, который сможет переименовать множество файлов с одинаковыми именами

структура каталогов
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
srcdir
  dir1
    dir1
      file1
      file2
      file3
    file1
    file2
    file3
  dir2
    dir1
      file1
      file2
      file3
    file1
    file2
    file3
  dir3
    dir1
      file1
      file2
      file3
    file1
    file2
    file3
  dir4
    dir1
      file4
    file4
  file1
  file2
  file3
  file4
  file5

тот вариант с date ближе всего к решению (вариант с $RANDOM может привести к коллизии)

хотя, в идеале, оно не должно переименовывать файл, если он уникальный
0
38 / 38 / 3
Регистрация: 28.01.2013
Сообщений: 123
13.03.2013, 00:57
Скрипт moving :
Bash
1
2
3
4
5
#!/bin/sh
fl_src="$1"
dir_dsc="$2"
fl_dsc="`echo "$fl_src" | sed 's~^\./~~; s~/~_~g'`"
mv "$fl_src" "$dir_dsc/$fl_dsc"
Находясь в каталоге со скриптом moving :
Bash
1
find ./path -type f -exec ./moving {} ./path2 \;
Дальше по вкусу.
0
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 5
13.03.2013, 14:00  [ТС]
—Здр.Все!
—kpp, спасибо за участие, но не работает скрипт, если запускать в терминале то пишет :"mv: не удалось выполнить stat для «»: Нет такого файла или каталога",- вот такие дела!
—Вот в это выражение
Bash
1
i= ; ls | while read; do mv "$REPLY" $((++i))".${REPLY//*.}"; done
поумничал добавил -R ну вроде чтоб все файлы показало из подкаталогов получилось,
Bash
1
i= ; ls -R | while read; do mv "$REPLY" $((++i))".${REPLY//*.}"; done
но тоже не работает
0
38 / 38 / 3
Регистрация: 28.01.2013
Сообщений: 123
13.03.2013, 14:11
adawdp
Мой вариант работает.
Проверял. Это направление, а не готовое решение.
Предпологаю, что дело в путях, кот. Вы используете.
Измените вот так:
Bash
1
2
3
4
5
#!/bin/sh
fl_src="$1"
dir_dsc="$2"
fl_dsc="`echo "$fl_src" | sed 's~^\./~~; s~/~_~g'`"
echo "\"$fl_src\" \"$dir_dsc/$fl_dsc\""
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.03.2013, 15:11
Цитата Сообщение от adawdp Посмотреть сообщение
поумничал добавил -R ну вроде чтоб все файлы показало из подкаталогов получилось
не, оно показывает много чего лишнего
так легко можно посмотреть, что выводятся и пустые строки, и двоеточия
Bash
1
ls -R | while read line; do echo "<$line>"; done
0
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 5
13.03.2013, 20:29  [ТС]
Цитата Сообщение от kpp Посмотреть сообщение
adawdp
Мой вариант работает.
Проверял. Это направление, а не готовое решение.
—Ладно раз направление, будем идти в заданном направлени! Не заработал скрипт . Поднобности ниже, чтобы место не занимать.
Кликните здесь для просмотра всего текста
—Моя система, возможно это имеет значение
—Ubuntu 12.04.1 LTS; Память 2,0ГиБ; Процессор Intel® Celeron(R); CPU 2.53GHz; ОС 32-разрядная

—На этой картинке отработка скриптов, два варианта предложенных скриптов 0CKpunTkpp1.sh и 0CKpunTkpp2.sh два варианта запуска, а также запускал их как программы из файлового менеджера nautilus.
—Одним словом переименование не наступило, под переименованием можно иметь ввиду просто подстановку либо случаной либо последовательной нумерации.
—Вот я собирал такую команду (длинная получилась), а потом делал скрипт тупенько, конечно, но всё работает.
Bash
1
sed -i -e 's/$/ /' 3pa3oK.txt | tr '\n' ' ';sed -i -e ':a;N;$!ba;s/\n//g' 3pa3oK.txt;sed -i 's/[ \t][ \t]*/\ /g' 3pa3oK.txt;sed -i 's/^[ \t]*//;s/[ \t]*$//' 3pa3oK.txt
Этоя к тому, будет ли работать у Вас, может действительно что-то с этими самыми путями...
—Убирает из текста лишние пробелы , переводы строк и т.п. , короче "вытягивает" текст в одну строку, в общем подготовка для дальнрейшего форматирования. В данном случае в файле 3pa3oK.txt
Я не программист, потому мне сложно будет идти по заданному направлению, но я попробую!
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.03.2013, 01:22
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[guest@localhost renfiles]$ ./renfiles.sh
usage: renfiles.sh srcdir dstdir
[guest@localhost renfiles]$ ./renfiles.sh s d
moving: s/dir1/dir1/file1.txt -> d/file1.txt
moving: s/dir1/dir1/file2.txt -> d/file2.txt
moving: s/dir1/dir1/file3.txt -> d/file3.txt
moving: s/dir1/dir2/file1.txt -> d/file1.txt_
moving: s/dir1/dir2/file2.txt -> d/file2.txt_
moving: s/dir1/dir2/file3.txt -> d/file3.txt_
moving: s/dir1/dir3/file1.txt -> d/file1.txt__
moving: s/dir1/dir3/file2.txt -> d/file2.txt__
moving: s/dir1/dir3/file3.txt -> d/file3.txt__
moving: s/dir1/file1.txt -> d/file1.txt___
moving: s/dir1/file2.txt -> d/file2.txt___
moving: s/dir1/file3.txt -> d/file3.txt___
moving: s/dir2/dir1/file1.txt -> d/file1.txt____
moving: s/dir2/dir1/file2.txt -> d/file2.txt____
moving: s/dir2/dir1/file3.txt -> d/file3.txt____
moving: s/dir2/dir2/file1.txt -> d/file1.txt_____
moving: s/dir2/dir2/file2.txt -> d/file2.txt_____
moving: s/dir2/dir2/file3.txt -> d/file3.txt_____
moving: s/dir2/dir3/file1.txt -> d/file1.txt______
moving: s/dir2/dir3/file2.txt -> d/file2.txt______
moving: s/dir2/dir3/file3.txt -> d/file3.txt______
moving: s/dir2/file1.txt -> d/file1.txt_______
moving: s/dir2/file2.txt -> d/file2.txt_______
moving: s/dir2/file3.txt -> d/file3.txt_______
moving: s/dir3/dir1/file1.txt -> d/file1.txt________
moving: s/dir3/dir1/file2.txt -> d/file2.txt________
moving: s/dir3/dir1/file3.txt -> d/file3.txt________
moving: s/dir3/dir2/file1.txt -> d/file1.txt_________
moving: s/dir3/dir2/file2.txt -> d/file2.txt_________
moving: s/dir3/dir2/file3.txt -> d/file3.txt_________
moving: s/dir3/dir3/file1.txt -> d/file1.txt__________
moving: s/dir3/dir3/file2.txt -> d/file2.txt__________
moving: s/dir3/dir3/file3.txt -> d/file3.txt__________
moving: s/dir3/file1.txt -> d/file1.txt___________
moving: s/dir3/file2.txt -> d/file2.txt___________
moving: s/dir3/file3.txt -> d/file3.txt___________
moving: s/file1.txt -> d/file1.txt____________
moving: s/file2.txt -> d/file2.txt____________
moving: s/file3.txt -> d/file3.txt____________
moving: s/file4.txt -> d/file4.txt
[guest@localhost renfiles]$
Вложения
Тип файла: zip renfiles.zip (22.1 Кб, 26 просмотров)
1
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 5
14.03.2013, 12:55  [ТС]
—Здр.,accept, да, это как раз то, что было нужно. А главное всё очень понятно! Очень, очень благодарен!
—Действительно, таким «монстрам» программирования как я нужно показывать пальцами!
—Для таких как я считаю нелишним кое-что дополнительно разъяснить:

• в архиве есть файлик инфо, его нужно внимательно посмотреть;
• папка s — это папка где находятся всё что нужно переименовать;
• папка d — это папка с результатами переименования;
• папка s_save — это папка где на всякий случай сохранено то, что будет переименовываться.
—Команда которая вводится должна выглядеть ./renfiles.sh s d обратите внимание на «s d»!
—На базе этого скрипта, можно делать другие косметически что-то подправив для своих нужд.
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.03.2013, 17:43
поменял переименование, чтобы сохранялось расширение
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[guest@localhost renfiles]$ ./renfiles.sh 
usage: renfiles.sh srcdir dstdir
[guest@localhost renfiles]$ ./renfiles.sh s d
moving: s/dir1/dir1/file1.txt -> d/file1.txt
moving: s/dir1/dir1/file2.txt -> d/file2.txt
moving: s/dir1/dir1/file3.txt -> d/file3.txt
moving: s/dir1/dir2/file1.txt -> d/file1_.txt
moving: s/dir1/dir2/file2.txt -> d/file2_.txt
moving: s/dir1/dir2/file3.txt -> d/file3_.txt
moving: s/dir1/dir3/file1.txt -> d/file1__.txt
moving: s/dir1/dir3/file2.txt -> d/file2__.txt
moving: s/dir1/dir3/file3.txt -> d/file3__.txt
moving: s/dir1/file1.txt -> d/file1___.txt
moving: s/dir1/file2.txt -> d/file2___.txt
moving: s/dir1/file3.txt -> d/file3___.txt
moving: s/dir2/dir1/file1.txt -> d/file1____.txt
moving: s/dir2/dir1/file2.txt -> d/file2____.txt
moving: s/dir2/dir1/file3.txt -> d/file3____.txt
moving: s/dir2/dir2/file1.txt -> d/file1_____.txt
moving: s/dir2/dir2/file2.txt -> d/file2_____.txt
moving: s/dir2/dir2/file3.txt -> d/file3_____.txt
moving: s/dir2/dir3/file1.txt -> d/file1______.txt
moving: s/dir2/dir3/file2.txt -> d/file2______.txt
moving: s/dir2/dir3/file3.txt -> d/file3______.txt
moving: s/dir2/file1.txt -> d/file1_______.txt
moving: s/dir2/file2.txt -> d/file2_______.txt
moving: s/dir2/file3.txt -> d/file3_______.txt
moving: s/dir3/dir1/file1.txt -> d/file1________.txt
moving: s/dir3/dir1/file2.txt -> d/file2________.txt
moving: s/dir3/dir1/file3.txt -> d/file3________.txt
moving: s/dir3/dir2/file1.txt -> d/file1_________.txt
moving: s/dir3/dir2/file2.txt -> d/file2_________.txt
moving: s/dir3/dir2/file3.txt -> d/file3_________.txt
moving: s/dir3/dir3/file1.txt -> d/file1__________.txt
moving: s/dir3/dir3/file2.txt -> d/file2__________.txt
moving: s/dir3/dir3/file3.txt -> d/file3__________.txt
moving: s/dir3/file1.txt -> d/file1___________.txt
moving: s/dir3/file2.txt -> d/file2___________.txt
moving: s/dir3/file3.txt -> d/file3___________.txt
moving: s/file1.txt -> d/file1____________.txt
moving: s/file2.txt -> d/file2____________.txt
moving: s/file3.txt -> d/file3____________.txt
moving: s/file4.txt -> d/file4.txt
[guest@localhost renfiles]$
Вложения
Тип файла: zip renfiles.zip (22.2 Кб, 44 просмотров)
1
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 5
14.03.2013, 18:37  [ТС]
—Здр. Ещё раз! Я понял! Спасибо! Меня и предыдущий вариант вполне устраивал. Ну а этот вариант выглядит просто академично!
—Дсв. (14.Березень.2013 16-36 Україна Луганськ)
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.03.2013, 18:57
Цитата Сообщение от adawdp Посмотреть сообщение
На базе этого скрипта, можно делать другие косметически что-то подправив для своих нужд
этот скрипт возвращает ноль или единицу, благодаря этому на нём можно строить команды вроде if
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2013, 18:57
Помогаю со студенческими работами здесь

Как собрать все файлы проекта в один exe?
есть работающий проект как скомпилировать его в 1 exe файл?

Как создать независимое приложение и собрать все рабочие файлы в один exe
Уважаемые, кто знает - подскажите! Как создать независимое приложение и собрать все рабочие файлы в один exe, чтобы программа могла...

Собрать все xml файлы в один и открыть в excel
Добрый день! Подскажите , Собрать все xml файлы в один , и можно ли этот файл открыть в excel в читаемом формате?

Перемещение всех файлов в указанный каталог из подкаталогов
Помогите пожалуйста в написании кода, разработать программу, которая перемещает все файлы в указанный пользователем каталог все файлы из...

Пользователь вводит каталог и надо узнать в нём размер всех каталогов и подкаталогов
Всем привет!Мужики спасайте. Есть такая задачка. Пользователь вводит каталог и надо узнать в нём размер всех катологов и подкаталогов.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru