С Новым годом! Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
14 / 13 / 4
Регистрация: 11.08.2016
Сообщений: 87

Переименование файлов

20.09.2017, 01:51. Показов 4487. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи.

Задача: Есть каталог и несколько уровней подкаталогов, в "последнем" каталоге лежит 1 файл, необходимо переименовать этот файл на имя каталога в которой он лежит.

Есть: /путь/к/файлу/какой-то файл.txt
Нужно получить: /путь/к/файлу/файлу.txt
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2017, 01:51
Ответы с готовыми решениями:

Переименование файлов.
Здравствуйте! Есть задача: во всех подкаталогах указанного в качестве параметра каталога (и в нем самом) переименовать все файлы в...

Переименование файлов в цифры
Написал скрипт для замены имен файлов в каталоге на цифры 1,2,3 и т.д Не могу исправить один недочёт,если в имени файла есть пробелы или...

Групповое переименование файлов
Здравствуйте! Есть прозвольное множество файлов вида: № 444-П от 28.11.2014 О внесении изменений в № 22-п от 23.01.13.doc № 4-Р от...

8
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.09.2017, 08:36
Bash
1
mv /путь/к/файлу/какой-то файл.txt /путь/к/файлу/файлу.txt
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
20.09.2017, 11:17
Marinero, если уровень вложенности +20, тоже набирать в терминале:
Bash
1
mv /это/очень/длинный/путь/до/файла/который/к/тому/же/может/содержать/пробелы/какой-то\ файл.txt /это/...
?
Можно, конечно, жать сколь угодно Tab, но чай тоже не айс.

Gukamanav, если имя искомого файла уникальное, т.е. если оно гарантированно нигде не дублируется в других подпапках, можно поступить так:
Bash
1
2
3
4
5
6
7
8
9
#!usr/bin/bash
# рекурсивынй поиск файла с именем some.txt
uniq_file=$(find . -name some.txt -type f)
# новое имя без полного пути
dest_name=$(basename "${uniq_file%/*}.${uniq_file##*.}")
# новое имя с полным путем
dest_name="${uniq_file/some.txt/$dest_name}"
# переименовываем
mv $uniq_file $dest_name
Если же файлов с одинаковыми именами несколько, можно find использовать вкупе с awk, дабы отыскать нужный, на худой конец пройтись циклом и ls.
0
14 / 13 / 4
Регистрация: 11.08.2016
Сообщений: 87
20.09.2017, 19:19  [ТС]
Marinero, Если все было бы так просто то я бы и вопрос не поднимал, но сам дурак не четко сформулировал задачу.

Во всех конечных каталогах лежит по 1 файлу с одинаковым названием, а вот каталог в которой лежит этот файл имеет уникальное имя. Нужно переименовать этот файл по имени каталога в которой он лежит. Можно было бы и в ручную переиминовывать каждый файл, но файлов и папок соответственно более 4000.

Есть

./B-C00030/J171518/solarsystem.staticdata
./B-C00030/J172354/solarsystem.staticdata
./B-C00030/J124023/solarsystem.staticdata
./B-C00026/J143505/solarsystem.staticdata
./B-C00026/J142306/solarsystem.staticdata
./B-C00026/J160753/solarsystem.staticdata
./B-C00026/J210422/solarsystem.staticdata


Нужно:

./B-C00030/J171518/J171518.staticdata
./B-C00030/J172354/J172354.staticdata
./B-C00030/J124023/J124023.staticdata
./B-C00026/J143505/J143505.staticdata
./B-C00026/J142306/J142306.staticdata
./B-C00026/J160753/J160753.staticdata
./B-C00026/J210422/J210422.staticdata

Но для автоматизации такого переименования моих знаний не хватает.
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
20.09.2017, 21:26
Лучший ответ Сообщение было отмечено Gukamanav как решение

Решение

С использованием find.
Bash
1
2
3
4
5
6
7
8
9
#!/bin/bash
# путь заменить на свой
DIR="."
# чтобы меньше набирать символов
ITM="solarsystem.staticdata"
for i in $( find $DIR -name $ITM -type f ); do
   NEW="${i/$ITM/$(basename ""${i%/*}.${i##*.}"")}"
   mv $i $NEW
done
Есть и альтернативные варианты.
1
14 / 13 / 4
Регистрация: 11.08.2016
Сообщений: 87
20.09.2017, 22:28  [ТС]
greg zakharov,
Примногоблагодарен. Нужно будет баш подтянуть...
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
21.09.2017, 00:25
Цитата Сообщение от Gukamanav Посмотреть сообщение
Нужно будет баш подтянуть...
Лучше ― zsh:
Bash
1
for f (**/solarsystem.staticdata) mv $f ${f:h}/${f:h:t}.${f:e}
() ― однострочный for (без do, done)
** ― рекурсивный глоб (в данном случае ищет в текущей директории и поддиректориях любого уровня вложенности)
:h ― вместо dirname
:t ― вместо basename
:e — расширение
При раскрытии переменных пробелы экранируются, поэтому кавычки не нужны.

Добавлено через 12 минут
zmv ― переименование/перенос в zsh
Bash
1
zmv '(**/)solarsystem(.staticdata)' '$1${1:t}$2'
Добавлено через 2 минуты
zmv принимает два шаблона — кого перемещать и куда. В первом шаблоне можно брать части в скобки, во втором можно ссылаться на эти скобки с помощью $1, $2 и т. д. Как sed, но с глобами вместо регулярных выражений.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
21.09.2017, 11:36
Gukamanav, уровень вложенности одинаковый?
Bash
1
rename -v 's|([^/]+)/solarsystem|$1\/$1|' */*/solarsystem.staticdata
(если установлен prename)
0
14 / 13 / 4
Регистрация: 11.08.2016
Сообщений: 87
21.09.2017, 19:10  [ТС]
Marinero, Да, я уже решил задачу с помощью примера предоставленого greg zakharov.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2017, 19:10
Помогаю со студенческими работами здесь

Проверка имен файлов и переименование
Добрый день. Помогите решить задачу с помощью батфайла Есть структура из определенного количества папок. Папка имеет название —...

Поиск и переименование файлов по заданным параметрам
1)Определить количество файлов или подкаталогов в корневом каталоге, к которым все имеют полные права доступа. 2)Написать скрипт, который...

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

Копирование, переименование, перемещение и удаление файла
Разработать программу, которая выполняет копирование, переименование, перемещение и удаление заданного файла. Файл, операция и ее...

Переименование PDF-файлов в имена, берущиеся из содержимого этих файлов
Всем доброго времени суток!:) Подскажите, пожалуйста, как переименовать файл с расширением pdf, взяв сам текст для наименования файла из...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru