Linux rename не работает

Как переименовать файл Linux

Переименование файла linux — очень простая операция, но для новичков в Linux эта задача может оказаться сложной. Также здесь есть несколько нюансов и возможностей, которые желательно знать уже опытным пользователям, например, массовое переименование. В графическом интерфейсе все делается очень просто, но настоящую гибкость дает терминал.

В этой статье мы рассмотрим как переименовать файл в Linux с помощью терминала, рассмотрим такие возможности, как массовое пакетное переименование файлов, а также регулярные выражения.

Как переименовать файл в Linux с помощью mv

В Linux существует замечательная стандартная утилита mv, которая предназначена для перемещения файлов. Но по своей сути перемещение — это то же самое, что и переименование файла linux, если выполняется в одной папке. Давайте сначала рассмотрим синтаксис этой команды:

$ mv опции файл-источник файл-приемник

Теперь рассмотрим основные опции утилиты, которые могут вам понадобиться:

  • -f — заменять файл, если он уже существует;
  • -i — спрашивать, нужно ли заменять существующие файлы;
  • -n — не заменять существующие файлы;
  • -u — заменять файл только если он был изменен;
  • -v — вывести список обработанных файлов;

Чтобы переименовать файл linux достаточно вызвать утилиту без дополнительных опций. Просто передав ей имя нужного файла и новое имя:

mv file newfile

Как видите, файл был переименован. Вы также можете использовать полный путь к файлу или переместить его в другую папку:

mv /home/sergiy/test/newfile /home/sergiy/test/file1

Обратите внимание, что у вас должны быть права на запись в ту папку, в которой вы собираетесь переименовывать файлы. Если папка принадлежит другому пользователю, возможно, нужно будет запускать программу через sudo. Но в таком случае лучше запускать с опцией -i, чтобы случайно ничего не удалить.

Переименование файлов Linux с помощью rename

В Linux есть еще одна команда, которая позволяет переименовать файл. Это rename. Она специально разработана для этой задачи, поэтому поддерживает такие вещи, как массовое переименование файлов linux и использование регулярных выражений. Синтаксис утилиты тоже сложнее:

$ rename опции ‘s/ старое_имя / новое_имя ‘ файлы

$ rename опции старое_имя новое_имя файлы

В качестве старого имени указывается регулярное выражение или часть имени которую нужно изменить, новое имя указывает на что нужно заменить. Файлы — те, которые нужно обработать, для выбора файлов можно использовать символы подставки, такие как * или ?.

Рассмотрим опции утилиты:

  • -v — вывести список обработанных файлов;
  • -n — тестовый режим, на самом деле никакие действия выполнены не будут;
  • -f — принудительно перезаписывать существующие файлы;

Например, переименуем все htm файлы из текущей папки в .html:

rename ‘s\.htm/\.html/’ *.htm

Или для изображений:

Символ звездочки означает, что переименование файлов linux будет выполнено для всех файлов в папке. В регулярных выражениях могут применяться дополнительные модификаторы:

  • g (Global) — применять ко всем найденным вхождениям;
  • i (Case Censitive) — не учитывать регистр.

Модификаторы размещаются в конце регулярного выражения, перед закрывающей кавычкой. Перед тем, как использовать такую конструкцию, желательно ее проверить, чтобы убедиться, что вы не допустили нигде ошибок, тут на помощь приходит опция -n. Заменим все вхождения DSC на photo в именах наших фотографий:

rename -n ‘s/DSC/photo/gi’ *.jpeg

Будут обработаны DSC, DsC и даже dsc, все варианты. Поскольку использовалась опция -n, то утилита только выведет имена изображений, которые будут изменены.

Можно использовать не только обычную замену, но и полноценные регулярные выражения чтобы выполнить пакетное переименование файлов linux, например, переделаем все имена в нижний регистр:

Из этого примера мы видим, что даже если такой файл уже существует, то он перезаписан по умолчанию не будет. Не забывайте использовать опцию -n чтобы ничего случайно не повредить.

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

Если вы не любите использовать терминал, но вам нужно массовое переименование файлов Linux, то вам понравится утилита pyrenamer. Это графическая программа и все действия здесь выполняются в несколько щелчков мыши. Вы можете установить ее из официальных репозиториев:

sudo apt install pyrenamer

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

Вы можете удалять или добавлять символы, переводить регистр, автоматически удалять пробелы и подчеркивания. У программы есть подсказки, чтобы сделать ее еще проще:

Опытным пользователям понравится возможность pyRenamer для переименования мультимедийных файлов из их метаданных. Кроме того, вы можете переименовать один файл если это нужно. Эта утилита полностью реализует функциональность mv и remove в графическом интерфейсе.

Выводы

В этой статье мы рассмотрели как переименовать файл в консоли linux. Конечно, есть и другие способы, например, написать скрипт, или использовать файловые менеджеры. А как вы выполняете сложные операции по переименованию? Напишите в комментариях!

Читайте также:  Что делать если при установке windows завис компьютер

Источник

Ubuntu. Не выполняется «rename» внутри «bash-скрипта» при передаче параметра при запуске

Помогите пожалуйста советом. Ситуация следующая. Имеется файл script.sh:

Задача этого файла, найти в директории «/var/www/html/» все файлы с расширением .php. Среди этих файлов определить тот, имя которого начинается с «x001x» и изменить текст после символов «x001x» на «8888888888888888.php»

При запуске файла из консоли в таком формате: sudo bash script.sh — все отрабатывает нормально. Но возникла необходимость запускать файл script.sh с параметром который будет передан внутрь «конструкции» rename для замены части строки 8888888888888888 на данные которые будут переданы «параметром».

В таком формате (часть строки «8888888888888888» заменена на $1) :

Но при запуске: sudo bash 1change.sh 99999999999

Получаю ошибку: Use of uninitialized value $1 in concatenation (.) or string at (eval 4) line 1.

Я уже пробовал передавать параметр $1 в переменную внутри скрипта, например VAR=$1 и потом добавлять переменную $VAR в скрипт. Пробовал конкатенировать тело скрипта из 3 переменных в одну строку. Но заставить работать конструкцию rename так и не получилось. Есть мнение что это связано с этой реализацией rename регулярное выражение которое реализовано через перл по этому и не получается передать переменную. Подскажите пожалуйста есть ли решение в этой ситуации? Спасибо.

Источник

rename не ренамит

manjaro linux. Почему-то rename ведёт себя непонятным образом. Раньше это работало: find -type f -exec rename ‘y/A-Z/a-z/’ <> \; а теперь даже так не хочет:

1) Почему так и как исправить?
2) Хотелось бы перед изучением других вариантов разобраться с 1)

Почему ты сразу бежишь на форум вопросы задавать? Ты как-то изучил проблему? Открыл ман? Почитал, как работает rename? Посмотрел, что за rename в системе? Что ты сам сделал?

Кто вам сказал, что я «сразу бегу» на форум? Вы ясновидящий? Нет? Тогда оставьте ваши ошибочные предположения при себе. Я ранее уже решал эту проблему, и это работало под другим дистро. А сейчас в manjaro — нет. И маны я читал, и гуглил. И такие вот решения с помощью форумчан, гугла, и манов отлаживал и использовал:

Это как пример вам на будущее, чтобы ванговать не лезли. А вот простое решение перестало работать. Что-то ему не нравится. Вы или помогите, или вангуйте в /dev/null

Прочитай что делает опция -n

Ты дурачек или притворяешься? Как из ОП можно понять, что ты вообще что-то делал? Там же тупо нытье и просьба за тебя работу сделать. И опять же, ман ты явно не читал, что за rename в системе ты явно не проверял, потому что если бы прочитал и проверил, то решил бы проблему за одну минуту. С ложечки дитятко кормить тут никто не нанимался.

Это в пасту выцепилось, что первым из хистори по ^R достал. Конечно я пробовал без этого ключа.

Вы продолжаете делать предположения и ошибаться, не надоело? Ман я читал, гуглил, и пробовал разные варианты. Кстати проблема не только у меня, её и другие юзера в том числе и тут озвучивали. Если вы не можете понять, что я вообще что-то делал, это ещё не означает, что я не делал ничего, это означает, что вы не можете либо не хотите этого понять. Вы же не дурак вроде, должны понимать такие элементарные вещи.

То, что ты так упорно не желаешь понять, что ты НИЧЕГО не делал, только подтверждает твой диагноз.

Даю тебе маленькую подсказку, в man rename в разделе AVAILABILITY есть информация, что за rename в системе. Прочитай внимательно и сравни с синтаксисом команды, которую ты тут приводишь. Потом погугли этот синтаксис и найдешь, что он к твоему rename не относится. Дальше думай сам.

Привыкли к prename , который по умолчанию заменяет rename из util-linux , а достался Вам второй.

Поставить perl или perl-rename или как он в Вашем дистрибутиве называется. Писать prename , а не просто rename .

У вас логика отсутствует. Вы меня не слышите.

в разделе AVAILABILITY есть информация, что за rename в системе

Но эту информацию я и так знаю: rename -V

Во всяких бубунтах find -type f -exec rename ‘y/A-Z/a-z/’ <> \; работает, версия rename 1.10
. В Manjaro 2.34 почему-то не работает.

perl (>= 5.26.0-6) Larry Wall’s Practical Extraction and Report Language

Да, pacman -S perl-rename и команда такая же, а не prename. Как-то медленно этот костыль на перле работает даже в почти пустом каталоге на одном файле, не говоря уже о каталоге с тысячами. Что сломали в новой версии и как её использовать? Это я хочу понять.

Читайте также:  Beyond compare для linux

Я щас изо всех сил пытаюсь не облить тебя. Давай еще раз. Наверное уже надо пояснить как для ребенка. Твой rename, который ты пытался юзать это НЕ !НЕЕ! НЕЕЕЕЕЕ тот rename, который в убунте или где ты там нашел эти примеры. Это две разные утилиты, которые работают по разному. И вообще есть баш с подстановкой $<,,>, так что тут rename и не нужен вовсе.

Не забудь сказать спасибо, что я так толерантно тебе всю тему поясняю простые вещи.

Запущенный вы сам. Зачем тычите пакетом убунты, когда у меня manjaro. Ваши доказательства кокаином?

Почему-то подумалось, что у тебя косяк возникает из-за того, что использовался раньше prename, вместо rename. Но это не точно. Что ты делал, чтобы решить проблему? Весь тред не читал, там анонимов много.

А если бы почитал тред, то понял бы, что ТС пробка и пытаться ему что-то пояснить — потеря времени.

Вы мне одолжение делаете? Спасибо, отец родной! Я понимаю, что в ubuntu и в manjaro разные версии команды rename. Не понимаю только откуда такая путаница.

Это две разные утилиты, которые работают по разному.

А сколько всего выслушать пришлось, нельзя сразу было с этого начать.

Остаётся вопрос, способна ли утилита в manjaro к функционалу той, что в бубунтах? Готов к новому потоку ценных замечаний и личностных характеристик.

А если бы почитал тред, то понял бы, что ТС пробка и пытаться ему что-то пояснить — потеря времени.

А, ну спасибо, что пояснил.

А вы поскипайте анонов, там только мои личностные характеристики) Ранее prename не стоял, на бубунтах активно пользовал эту конструкцию с rename. На manjaro всегда были куда более сложные задачи, я привел в начале темы пару таких примеров, и просто не было нужды в rename. а тут вспомнил, захотел заюзать, и оппаньки.
Хочу разобраться, почему так.

Тебе же вроде анон уже все описал. Это разные тулзы.

Ему потребовалось многократно излиться в теме, а весь полезный текст в одной строке: «Это две разные утилиты, которые работают по разному.» Сразу это нельзя было написать. Ну может хоть теперь обсудим, если он с девушки на мою мать не переключится)

Я понял. Мне интересно, почему так.

Что «почему так»? Вопрос из разряда почему огурец и яблоко разные.

тулз ‘rename’ в линуксе в природе штуки три, у них опции не совпадают. Особенно в дебианоподобных дистрах. Читай внимательней маны и гугли

Ну обычный вопрос, откуда такая путаница, почему в manjaro присутствует совершенно другая утилита с тем же именем. И какая есть ей альтернатива (желательно со схожим синтаксисом) кроме prename. Но что-то мне подсказывает, что сейчас у анонов опять пригорит, аноны они такие.

Спасибо. А какая третья? Мне интересно, отчего так исторически сложилось, попробую погуглить ещё.

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

perl-rename появился раньше (и изначально команда называлась именно rename), чем rename из util-linux. Когда появился rename в util-linux, чтобы избежать путаницы, перловскую переименовали в prename. Но, для совместимости с ранними релизами, где rename был именно prename (ну мало ли у кого с 90-х годов скрипты хранятся), в дебиане (и ряде других дистров) по умолчанию rename предоставляется именно prename и переключается на rename.ul через механизм alternatives. В арче (и его производной манджаре) используют ванильные пакеты, с alternatives не заморачиваются, rename из util-linux в rename.ul не переименовывают, поэтому там так.

Исчерпывающий ответ, большое спасибо! Я только не очень понял многобуквие wiki/Alternatives. Это просто умолчание, что rename это симлинк на выбранный в системе «один из двух и более кандидатов», или некий программный комплекс, включающий в себя что-то ещё?
И почему в отличии от дебов в арчах пакеты ванильные?

А сколько всего выслушать пришлось, нельзя сразу было с этого начать.

Буквально первый коммент в треде, ну.

Да, «буквально первый коммент» и «пред-предпоследний коммент» это яркие примеры степени умения излагать свои мысли и доносить их вовне.

mv попробуй если терминальщик токой и гуи не встовляють

И почему в отличии от дебов в арчах пакеты ванильные?

Политика дистрибутива такая. Частично такая политика вытекает из характера дистрибутива: дебиан ­— релизный, а арч — роллинг.

дебиан ­— релизный, а арч — роллинг. но кому то обычно выгодно бывает настаивать на том или ином путе, вот и вапрос кто более ответственнен а кто хипстерней так сказать. пом не так ubuntu я ее по телеку столько раз видел и на конпах ребят колайдеры строящих и на тех что теслу в космас отправляюют, нокому то ти аргументов не достаточно и оне таки находют чем ответить и за самое жывое обично цыпляють и окажысь я подростком я бы естестна не смог бы таких тем мимо пройти, че не посан чоле.

Как мне сказал товарищ, преподаватель питона, «вот поэтому я обычно так гуглю и гуглю до одурения, ибо гуру линукса очень любят кидаться какашками, как будто для них очевидный вопрос, это какое-то оскорбление. Интересно, вот они реально по манам такие ‘умные’ стали?»

Читайте также:  Экран блокировки windows 10 где находятся

Перевод на русский можно?

Чувак, ты неправ. Мало того, что читать не умеешь или не хочешь, один раз неправ. Но рассказывать, что тебе якобы не ответили — это вообще зашквар. Постеснялся бы позориться.

А вы неправы говоря, что я неправ. Не приписывайте мне того, что я не говорил. Я указал на два примера степени умения излагать свои мысли и доносить их вовне.

Не приписывайте мне того, что я не говорил.

А кого я там процитировал?

А вы меня цитировали? Где?

Хорошо, давайте разберём «Буквально первый коммент» на который вы ссылаетесь:

Ты дурачек или притворяешься? Как из ОП можно понять, что ты вообще что-то делал? Там же тупо нытье и просьба за тебя работу сделать. И опять же, ман ты явно не читал, что за rename в системе ты явно не проверял, потому что если бы прочитал и проверил, то решил бы проблему за одну минуту. С ложечки дитятко кормить тут никто не нанимался.

Если опустить поток ругани и хамства, остаётся голое утверждение, что если бы я прочитал маны, то сам бы всё решил за минуту. Утверждение ложное. Маны я читал и маны не помогли. Полезной инфы в этом «ответе» чуть более нуля.

А вот полезный исчерпывающий ответ:

perl-rename появился раньше (и изначально команда называлась именно rename), чем rename из util-linux. Когда появился rename в util-linux, чтобы избежать путаницы, перловскую переименовали в prename. Но, для совместимости с ранними релизами, где rename был именно prename (ну мало ли у кого с 90-х годов скрипты хранятся), в дебиане (и ряде других дистров) по умолчанию rename предоставляется именно prename и переключается на rename.ul через механизм alternatives. В арче (и его производной манджаре) используют ванильные пакеты, с alternatives не заморачиваются, rename из util-linux в rename.ul не переименовывают, поэтому там так.

Удивительно, ни одного ругательства, и как только ему это удалось?

Я не отрицаю, что мне не ответили, я отрицаю, что первый ответ был полезным, и не жалею о создании темы, благодаря которой всё разложил по полочкам комрад, в чьей речи КПД преобладает над ругательствами. Где вы увидели в этом зашквар и позор?

Вообще-то тот анон полностью прав. Ты не читал ман. Тебя ткнули чуть ниже того поста анона в цитату из сабжевого мана, где описано, что за утилита ренейм и откуда она, какой у нее синтаксис и какая версия. Ты это не проверил, но подаешь все под соусом «я три дня гуглил, но не нашел», хотя это очевидная ложь. Потому тебе никто и не хочет помогать, у тебя все темы такие. Ты хочешь, чтобы за тебя всю работу сделали, потому что ты «много читал, но не понял, потому что не читал».

Один анон заступается за другого) Что вам мешает писать с ника, не анонимно? Не взлом кремля обсуждаем же) В отношении меня это ваше снобское предубеждение, как это мило, стигматизировать незнанием ищущего ответы, а уж ткнуть в маны вообще святое дело. Я действительно глядя ключи в мане не увидел разницы между двумя rename, и пытался использовать утилиту из util-linux как перловую. Там нет подзаголовка «смотрите не спутайте меня с моим тёзкой.»

А мне когда-то преподаватель говорил, что лучше признать себя невеждой и спросить, чем биться в бессистемных поисках и оставаться в неведении. И я с ним согласен, поэтому не стесняюсь спрашивать, даже если это кому-то не понравится, на всех всё равно не угодишь.

Нет, я с тобой согласен, чтобы признать, что ты мягко говоря не самый сообразительный, нужно себя перебороть, за это тебе респект. Но это лор, тут свои порядки. Если ты такой ранимый, тебе лучше искать ответы на площадках, где с такими людьми общаются соответствующе.

Незнание не сифилис, признать не стыдно. Касаемо сообразительности, я не ранимый, вам виднее, как скажите.

Источник

Оцените статью