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

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

12.03.2013, 21:28. Показов 5172. Ответов 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 / 3288 / 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 / 3288 / 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 / 3288 / 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 / 3288 / 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 / 3288 / 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
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru