[РЕШЕНО] Вопрос по Double Commander

Браузеры, почтовые клиенты, офисные пакеты, файловые менеджеры, редакторы и т.п.
Ответить
waldym
Сообщения: 20
Зарегистрирован: 22.08.2022

#

Не подскажете, есть ли возможность в названии файлов, при групповом переименовании, поменять местами слова целиком, по определенному шаблону, к примеру, ФИ на привычное ИФ и второй вопрос, как "сказать" программе, что-бы действия выполняла только на определенном участке названия, к примеру внутри круглых () или квадратных [] скобках, игнорируя остальное.
Последний раз редактировалось waldym 29.03.2023 09:57, всего редактировалось 1 раз.
vall
Аватара пользователя
Администрация
Сообщения: 727
Зарегистрирован: 09.08.2022

#

Видимо никто из форумян не ставил перед собой такие задачи в doublecmd.
По моему такие вещи в линукс чаще делают из командной строки с помощью команды rename. Либо в сложных случаях (как у Вас со скобками) пишется простой скрипт.

Поиск в сети в помощь.
waldym
Сообщения: 20
Зарегистрирован: 22.08.2022

#

Если бы речь шла о простом переименовании, я не стал бы даже выходить из Thunar(a), с его Инструменты=>Массовое переименование, даже не прибегая к терминалу и само-собой, не прося помощи на форуме. Но здесь, более сложная задача. Попробую объяснить на примере. Итак исходный файл:
10. Котлов Алексей и группа «DJ Дождик» - Подожди Немножко.mp3
Мне нужно сделать следующее: Начиная с 4(ой) позиции (это пробел), затем целиком слово №1 (в данном примере это Котлов), затем снова пробел, снова целое слово №2 (Алексей) и снова пробел. Мне нужно поменять местами целое слово №2 (Алексей) с целым словом №1 (Котлов) не нарушая оставшиеся названия файла. А с скобками () попроще, но я то-же не знаю как это сделать. Пример:
05. Мираж ( Болдышева Екатерина & Алексей Горбашов ) - Звёзды.mp3
Нужно убрать пробелы после открывающей скобки и перед закрывающей. Буду рад, если сможете помочь "Автаматизировать процес", а то вручную буду до пенсии переименовывать.
indeviral
Аватара пользователя
Сообщения: 199
Зарегистрирован: 15.08.2022

#

1. Разбиваем строку на слова запихиваем в массив и меняем 1 и 2 элемент местами.
#!/bin/bash
input_string="Это строка для тестирования разбиения на слова"
read -ra words <<< "$input_string"
temp=${words[1]}
words[1]=${words[2]}
words[2]=$temp
echo "Измененный массив: ${words[@]}"
2. Меняем "( " на "(" и " )" на ")".

Ошибки в тексте-неповторимый стиль автора©

vasek
Сообщения: 455
Зарегистрирован: 31.08.2022

#

waldym:Нужно убрать пробелы после открывающей скобки и перед закрывающей.
Использую sed или awk
Пример sed
cat test
05. Мираж ( Болдышева Екатерина & Алексей Горбашов ) - Звёзды.mp3
222. vvvvvv ...( nnnnn ttttt 2222 )
3333AAA( 44444 )

sed 's/( /(/' test | sed 's/ )/)/' > test_new
cat test_new
05. Мираж (Болдышева Екатерина & Алексей Горбашов) - Звёзды.mp3
222. vvvvvv ...(nnnnn ttttt 2222)
3333AAA(44444)

Ошибки не исчезают с опытом - они просто умнеют

vasek
Сообщения: 455
Зарегистрирован: 31.08.2022

#

waldym:нужно поменять местами целое слово №2 (Алексей) с целым словом №1 (Котлов) не нарушая оставшиеся названия файла
Здесь проще использовать awk
cat test
10. Котлов Алексей и группа «DJ Дождик» - Подожди Немножко.mp3
awk '{t=$2;$2=$3;$3=t}1' test > test_new
cat test_new
10. Алексей Котлов и группа «DJ Дождик» - Подожди Немножко.mp3
С пробелами разбирайся сам ...

Ошибки не исчезают с опытом - они просто умнеют

waldym
Сообщения: 20
Зарегистрирован: 22.08.2022

#

Спасибо за советы. Будем пробовать с множеством файлов, правда я еще не знаю как это реализовать. Не хочется после терминала, снова возвращаться в Double Commander и "подпихивать" ему список с "правильными названиями".
vasek
Сообщения: 455
Зарегистрирован: 31.08.2022

#

waldym:правда я еще не знаю как это реализовать
Где нужно переименовать? - в самом файле? или в имени файлов, находящихся в какой-то директории?
Просто нужно правильно направить поток .... это linux и можно все, только нужно этому учится.

Ошибки не исчезают с опытом - они просто умнеют

waldym
Сообщения: 20
Зарегистрирован: 22.08.2022

#

Я просто не знаю, каким образом можно переименовать только выделенные файлы, как это сделано в Double Commander, а не полностью всю папку (ls *.mp3). Может подскажете?
vasek
Сообщения: 455
Зарегистрирован: 31.08.2022

#

На будущее - никогда не используй пробелы в именах файлов.
Лично я использую вместо пробелов подчеркивание "_"
Может будет проще заменить все пробелы на подчекивание???
Пример ...
Переходим в нужную директорию
cd ~/TTT/TEST
Смотрим что в ней имеется
ls -1
'01. Мираж ( АБС ДЕ )'
'02. Мираж ( АБС ДЕ )'
'03. Мираж ( АБС ДЕ )'
Заменям все пробелы в этих файлах на подчекивание
find . -type f -name "* *" -exec bash -c 'mv "$0" "${0// /_}"' {} \;
Смотрим что получилось
ls -1
'01._Мираж_(_АБС_ДЕ_)'
'02._Мираж_(_АБС_ДЕ_)'
'03._Мираж_(_АБС_ДЕ_)'
Может этого тебе будет и достаточно … и не нужно мудрить.

PS - наличие пробелов в именах файлов не дает простое использовать sed для переименования файлов (нарушается поточность). А вот после того как заменил пробелы на подчекивание, уже можно будет часть этих подчекиваний и убрать, используя тот же sed --- как это делать почитай это
Как пример
имеем
ls
'01._Мираж_(_АБС_ДЕ_)'  '02._Мираж_(_АБС_ДЕ_)'  '03._Мираж_(_АБС_ДЕ_)'
Удалим подчекивание (_ .... _) за два эпапа (можно и объединить):
find . -type f | sed 'p;s/(_/(/' | xargs -n2 mv
find . -type f | sed 'p;s/_)/)/' | xargs -n2 mv
ls
'01._Мираж_(АБС_ДЕ)'  '02._Мираж_(АБС_ДЕ)'  '03._Мираж_(АБС_ДЕ)'
... имея пробелы - так выполнить не получится ...

Ошибки не исчезают с опытом - они просто умнеют

waldym
Сообщения: 20
Зарегистрирован: 22.08.2022

#

Спасибо за совет с подчеркиванием. Вроде получается, с удалением пробелов, но как мне после первого переименования, вернуть пробелы на свои места (они нужны будут для команды awk). Тупо заменить в команде
find . -type f -name "* *" -exec bash -c 'mv "$0" "${0// /_}"' {} \;
подчеркивания на пробелы не получается.
vasek
Сообщения: 455
Зарегистрирован: 31.08.2022

#

waldym:подчеркивания на пробелы не получается.
Тогда используй такую команду:
for file in *; do mv "$file" "$(echo "$file" | tr 'X'Y 'Y ')" ; done
где X - что меняем, Y - на что меняем ..... НЮАНС: после Y пробел, а после X пробела нет
Примеры
ls
'01._Мираж_(_АБС_ДЕ_)' '02._Мираж_(_АБС_ДЕ_)' '03._Мираж_(_АБС_ДЕ_)'

for file in *; do mv "$file" "$(echo "$file" | tr '_' ' ')" ; done
ls
'01. Мираж ( АБС ДЕ )' '02. Мираж ( АБС ДЕ )' '03. Мираж ( АБС ДЕ )'

for file in *; do mv "$file" "$(echo "$file" | tr ' '_ '_ ')" ; done
ls
'01._Мираж_(_АБС_ДЕ_)' '02._Мираж_(_АБС_ДЕ_)' '03._Мираж_(_АБС_ДЕ_)'

for file in *; do mv "$file" "$(echo "$file" | tr '_'# '# ')" ; done
ls
'01.#Мираж#(#АБС#ДЕ#)' '02.#Мираж#(#АБС#ДЕ#)' '03.#Мираж#(#АБС#ДЕ#)'

Ошибки не исчезают с опытом - они просто умнеют

Ответить