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

Содержание

Копирование, перемещение, создание и удаление файлов и каталогов. Курс

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

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

Копирование файлов и каталогов

В Bash для копирования файлов используется команда cp (от “copy”), которой обычно передаются два аргумента:

  1. адрес с именем исходного файла,

  2. новый адрес с именем или просто адрес каталога, куда помещается копия.

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

Рассмотрим примеры.

cp readme readme2

В данном случае создается копия файла readme, которая остается в той же директории под именем readme2.

cp readme Desktop/

В папку Desktop копируется файл readme. Здесь текущим является родительский Desktop'у каталог. Имена копии и файла оригинала будут совпадать, а вот полные адреса – нет.

cp /home/irina/tux.png /mnt/D/pingvin.png

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

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

Чтобы скопировать каталог со всем его содержимым, необходимо использовать ключ -r команды cp:

cp -r ./letters ./oldletters

Перемещение и переименование

В Bash-оболочке Linux для перемещения и переименования используется одна и та же команда – mv (от “move” – перемещать). Переименование можно рассматривать как частный случай перемещения, ведь по-сути изменяется полный адрес файла, что равносильно перемещению, даже если файл остается в том же каталоге.

Также как в случае cp, для mv необходимо указать пару аргументов. Выбор между перемещением и переименованием зависит от того, что это за аргументы.

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

Кроме того, перемещение может быть совмещено с переименованием.

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

mv document.txt Work

mv document.txt Work/doc23.txt

Здесь в первом случае файл document.txt перемещается в каталог Work. Во-втором случае одновременно происходит перемещение файла и его переименование: файл document.txt перемещается в директорию Work и получает новое имя doc23.txt.

При использовании команды mv для переименования в качестве второго аргумента указывается новое имя:

mv order.txt orderNew.txt

mv Work/list.odt Work/names.odt

Каталоги перемещаются и переименовываются по тому же принципу, что и файлы. Групповое перемещение файлов работает также, как с командой cp.

Создание файлов и каталогов

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

mkdir Workили

mkdir ./Work

Существует множество способов создания файлов, обычно они создаются какой-либо программой. Если все же возникает необходимость создать пустой файл, сделать это можно с помощью программы touch. В качестве аргумента ей передается имя создаваемого файла. Еще один способ – перенаправление вывода какой-либо команды в файл. Пример:

cal > ./Work/January

Здесь программа cal выводит календарь на текущий месяц, а поскольку стоит знак перенаправления вывода, то вывод команды будет записан в файл January, находящийся в папке Work.

Удаление файлов и каталогов

Для удаления файлов используется команда rm. Например:

rm ghost.png

Командой rmdir можно удалить пустой каталог. Если же каталог не пуст, следует использовать команду rm с ключом -r:

Вопросы

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

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

Курс с ответами к заданиям: android-приложение, pdf-версия.

Источник: //younglinux.info/bash/cpmv.php

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

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

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

Переименование командой mv

 
Команда mv (от слова move) используется для переименования или перемещения файлов и директорий из командной строки.

Синтаксис команды mv очень простой:

mv опции источник назначение

источник — файл(ы) или директория, которую необходимо переместить или переименовать.
назначение — файл или директория, в которую будет перемещен источник.

Основные опции:
-f — перезаписывать существующие файлы.
-n — не перезаписывать существующие файлы.

-i — выдавать запрос на перезапись существующих файлов.
-u — не перемещать файлы, которые уже существуют, если существующие файлы новее (время модификации новее).

-v — выводить имя каждого файла перед его переносом.

Как задавать имена файлов и директорий для переименования:

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

Рассмотрим примеры.

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

Переименование файла myfile1.dat в файл myfile2.dat:

mv myfile1.dat myfile2.dat

Переименование файла с указанием пути до файла:

mv /home/pingvinus/myfile1.dat /home/pingvinus/myfile2.dat

Переименование директории

Переименование директории /home/pingvinus/mydir1 в директорию /home/pingvinus/mydir2. Справедливо, если /home/pingvinus/mydir2 не существует.

mv /home/pingvinus/mydir1 /home/pingvinus/mydir2

Если /home/pingvinus/mydir2 существует, то, выполнив команду:

mv /home/pingvinus/mydir1 /home/pingvinus/mydir2

директория mydir1 будет перемещена внутрь директории /home/pingvinus/mydir2. То есть mydir1 будет в результате находиться по адресу /home/pingvinus/mydir2/mydir1.

Переименование и перемещение

Если в качестве файла назначения указан новый путь и новое имя файла, то файл будет перемещен и переименован. Например, следующая команда перемещает файл myfile1.dat в директорию /home/pingvinus/dir и переименовывает его в myfile2.dat:

mv /home/pingvinus/myfile1.dat /home/pingvinus/dir/myfile2.dat

Переименование командой rename

Команда rename служит для массового (пакетного) переименования файлов. Она позволяет выполнять замену определенных символов или частей имени файла и использованием Perl-регулярных выражений.

Если вдруг в вашем дистрибутиве нет команды rename, то ее можно установить, выполнив (выберите соответствующую команду для вашего дистрибутива):

sudo apt install renamesudo yum install prenameyaourt -S perl-rename

Синтаксис команды rename:

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

старое_имя — регулярное выражение или часть имени файла, которое нужно заменить на новое_имя.
новое_имя — задает результирующее имя файла (может быть регулярным выражением).

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

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

Изменение расширения файлов

Массово изменить расширение .html на .php у всех html-файлов.

rename 's/.html/.php/' *.html

По умолчанию rename не перезаписывает существующие файлы. Чтобы существующие файлы перезаписывались, используется опция -f:

rename -f 's/.html/.php/' *.html

Замена пробелов на подчеркивание

Заменить все символы пробелов в имени файлов на символ подчеркивания:

rename 'y/ /_/' *

Показать, что именно будет переименовано, но не переименовывать

Чтобы избежать ошибок при переименовании файлов, особенно при использовании сложных регулярных выражений, можно сначала вывести список того, что будет переименовано, но не запускать само переименование. Для этого служит опция -n.

Например, мы хотим изменить расширение у файлов с .jpeg на .jpg. Используем опцию -n, чтобы просто вывести какие файлы будут переименованы:

rename -n 's/\.jpeg$/.jpg/' *

Полное описание команд mv и rename можно получить, выполнив в терминале команды:

man mvman rename

Массовое переименование с использованием программ

Для массового переименования файлов можно воспользоваться программами:

Источник: //pingvinus.ru/note/rename-files

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

Переименовываем файлы в 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

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

rename 's\.jpeg/\.jpg/'*

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

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

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

rename -n 's/DSC/photo/gi' *.jpeg

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

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

rename 'y/A-Z/a-z/'*.jpeg

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

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

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

 sudo apt install pyrenamer

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

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

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

Выводы

Источник: //losst.ru/kak-pereimenovat-fajl-linux

Rename – утилита командной строки для переименовывания большого количества файлов в Linux

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

Библиотека сайта rus-linux.net

Оригинал: Rename – A Command Line Tool For Renaming Multiple Files in Linux Ravi Saive 10 октября 2013 годаПеревод: А. Кривошей

Дата перевода: апрель 2014 г.

Для переименования единичного файла в Linux мы часто используем команду “mv”. Однако переименование таким способом большого количества файлов займет много времени.
В Linux имеется очень мощная встроенная утилита rename, которая используется для перименовывания большого количества файлов, изменения регистра в их названиях с помощью выражений на perl.

Команда “rename” – это часть скрипта Perl, расположенного в “/usr/bin/” практически во всех дистрибутивах Linux. Вы можете использовать команду “which”, чтобы посмотреть, где находится команда rename.

$ which rename/usr/bin/rename

Базовый синтаксис команды rename

rename 's/old-name/new-name/' files

Команда rename, помимо обязательного выражения perl, имеет несколько опциональных аргументов, которые позволяют более тонко настроить ее работу.

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

-v: выводить имена успешно переименованных файлов.-n: показать, какие файлы будут переименованы.-f: принудительно перезаписать существующие файлы.

perlexpr: выражение Perl.

Для лучшего понимания работы этой утилиты мы рассмотрим несколько практических примеров

1. Простой пример использования rename

Предположим, у вас есть куча файлов с расширением “.html”, и вы хотите изменить их расширение на “.php”. Сначала я вывожу их список с помощью команды “ls -l”:

# ravisaive@tecmint:~$ ls -ltotal 22532-rw-rw-r– 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html-rw-rw-r– 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html-rw-rw-r– 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html-rw-rw-r– 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html-rw-rw-r– 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html-rw-rw-r– 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html-rw-rw-r– 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html

Для пакетного переименовывания я использую команду “rename” с perl-выражением, как показано ниже.

ravisaive@tecmint:~$ rename 's/\.html$/\.php/' *.html

Приведенная выше команда имеет два аргумента.Первый аргумент, это perl-выражение, которое подставляет .php вместо .html.Второй аргумент указывает, что эту подстановку необходимо произвести для всех файлов с расширением .html.

Проверим результат выполнения команды:

ravisaive@tecmint:~$ ls -ltotal 22532-rw-rw-r– 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.php-rw-rw-r– 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.php-rw-rw-r– 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.php-rw-rw-r– 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.php-rw-rw-r– 1 ravisaive ravisaive 938895 Oct 10 12:10 news.php-rw-rw-r– 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.php-rw-rw-r– 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.php

2. Проверка изменений перед запуском команды rename

При выполнении критичных или важных задач по переименовыванию, вы всегда можете сначала проверить, какие изменения будут внесены, запустив команду “rename” с аргументом “-n”, который позволяет просмотреть изменения, не применяя их к реальным файлам. Пример команды ниже.

ravisaive@tecmint:~$ rename -n 's/\.php$/\.html/' *.php cricket.php renamed as cricket.htmlentertainment.php renamed as entertainment.htmlhealth.php renamed as health.htmllifestyle.php renamed as lifestyle.htmlnews.php renamed as news.htmlphotos.php renamed as photos.htmlsports.php renamed as sports.html

3. Показ вывода Rename

Мы видим, что команда rename не выводит никакой информации о сделанных ею изменениях. Поэтому, если вы хотите видеть такую информацию, для вывода подробных сведений обо всех сделанных изменениях необходимо использовать опцию “-v”.

ravisaive@tecmint:~$ rename -v 's/\.php$/\.html/' *.php cricket.php renamed as cricket.htmlentertainment.php renamed as entertainment.htmlhealth.php renamed as health.htmllifestyle.php renamed as lifestyle.htmlnews.php renamed as news.htmlphotos.php renamed as photos.htmlsports.php renamed as sports.html

4. Преобразование нижнего регистра в верхний и наоборот

Например, у меня есть следующие файлы.

ravisaive@tecmint:~$ ls -ltotal 22532-rw-rw-r– 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html-rw-rw-r– 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html-rw-rw-r– 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html-rw-rw-r– 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html-rw-rw-r– 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html-rw-rw-r– 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html-rw-rw-r– 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.htmlДля пакетного изменения регистра в названиях файлов с нижнего на верхний используется следующая команда с выражением perl:
ravisaive@tecmint:~$ rename 'y/a-z/A-Z/' *.html

Проверим результат выполнения команды:

ravisaive@tecmint:~$ ls -ltotal 22532-rw-rw-r– 1 ravisaive ravisaive 6888896 Oct 10 12:10 CRICKET.HTML-rw-rw-r– 1 ravisaive ravisaive 588895 Oct 10 12:10 ENTERTAINMENT.HTML-rw-rw-r– 1 ravisaive ravisaive 6188895 Oct 10 12:10 HEALTH.HTML-rw-rw-r– 1 ravisaive ravisaive 6538895 Oct 10 12:10 LIFESTYLE.HTML-rw-rw-r– 1 ravisaive ravisaive 938895 Oct 10 12:10 NEWS.HTML-rw-rw-r– 1 ravisaive ravisaive 938937 Oct 10 12:11 PHOTOS.HTML-rw-rw-r– 1 ravisaive ravisaive 978137 Oct 10 12:11 SPORTS.HTML

Похожим образом можно сделать обратное преобразование – из верхнего региста в нижний.

ravisaive@tecmint:~$ rename 'y/A-Z/a-z/' *.HTMLravisaive@tecmint:~$ ls -ltotal 22532-rw-rw-r– 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html-rw-rw-r– 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html-rw-rw-r– 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html-rw-rw-r– 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html-rw-rw-r– 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html-rw-rw-r– 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html-rw-rw-r– 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html

5. Перезапись существующих файлов

Если вы хотите принудительно перезаписать существующие файлы, используйте опцию “-f”, как показано ниже.

ravisaive@tecmint:~$ rename -f 's/a/b/' *.html

Для получения более подробной информации о команде rename можно почитать ее man-страницу, введя в терминале “man rename”.
Команда rename очень полезна, если вам приходится иметь дело с пакетной обработкой файлов в командной строке.

Если вам понравилась статья, поделитесь ею с друзьями:

Источник: //rus-linux.net/MyLDP/consol/rename.html

Переименование файлов с помощью find, sed и xargs

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

Данное сообщение не претендует на оригинальность, это просто очередной пример того, как можно переименовать много файлов с помощью командной строки в Linux, используя find, sed, xargs и mv.

Общий вид

Идея такая:

  1. Вывести имена нужных файлов (ls, echo или find).
  2. Произвести замену каждого имени и вывести старое имя и новое имя (sed).
  3. Применить к каждой паре старое имя – новое имя команду mv (xargs).

На языке bash эти 3 команды могут выглядеть так:

user ~ $user ~ $user ~ $ls | sed | xargs mvecho | sed | xargs mvfind | sed | xargs mv

Мы будем говорить о последнем варианте, поскольку find является очень мощной и гибкой утилитой для поиска файлов.

Пример №1

Простейший случай, необходимо произвести такую замену с большим количеством файлов:

01-filename.txt → 01-new.txt02-filename.txt → 02-new.txt…

Для экспериментов создадим директорию ~/test/.

user ~ $user ~ $mkdir ~/test/cd ~/test/
user test $touch {1..5}-filename.txt

Теперь в директории ~/test/ должно появиться 5 пронумерованных файлов. Выведем эти файлы (точка после find означает, что поиск надо проводить в текущей директории; ключ -type f просит выводить только файлы).

find

user test $find . -type f

./1-filename.txt./2-filename.txt./5-filename.txt./4-filename.txt./3-filename.txt

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

sed

Общий вид команд в редакторе sed:

sed 's/old/new/g'sed 's#old#new#g'sed 's:old:new:g'

Если выполнить данные команды, то sed будет ждать ввода аргументов с клавиатуры. После каждого нажатия Enter sed выведет строку, заменив в ней ‘old’ на ‘new’, если ‘old’ будет присутствовать в введённой строке. Но обычно sed используется либо в связках типа find | sed, либо принимает в качестве аргумента имена файлов, чтобы произвести замены внутри файлов.

Заметьте, что вы сами можете выбирать разделитель — например, /, # или: (хотя можно использовать почти любой символ), комбинировать их нельзя. Буква ‘s’ — заменить (от англ. substitute);буква ‘g’ (от англ.

global) в конце стоит для того, чтобы замена происходилаво всей строке не только для первого вхождения, а столько раз, сколько тамвстретится «old».

Когда в заменяемых выражениях встречаются слэши (/или \), то каждую из них приходится предварять дополнительным обратнымслэшем, тогда код слишком сильно напоминает частокол и удобнее использоватьдвоеточие или что-то другое в качестве разделителя.

Итак, посмотрим, что мы можем сделать двумя первыми шагами find | sed:

user test $find . -type f | sed 's:filename:new:g'

./1-new.txt./2-new.txt./5-new.txt./4-new.txt./3-new.txt

Отлично, нужные нам имена выведены. Но в третьем шаге утилите xargs нужны и старое, и новое имя файла, чтобы применить к ним команду mv. Поэтому модифицируем команду sed:

sed 'p;s:old:new:g'

Знак «p;» (p — print), стоящий перед «s», просит sed выдавать не только результат, но и исходный материал. Теперь вывод будет такой:

user test $find . -type f | sed 'p;s:filename:new:g'

./1-filename.txt./1-new.txt./2-filename.txt./2-new.txt./5-filename.txt./5-new.txt./4-filename.txt./4-new.txt./3-filename.txt./3-new.txt

То, что нужно. Переходим к третьему шагу.

xargs

Программа xargs работает с потоками данных. Утилита принимает один поток и может «распараллелить» его на несколько. Чтобы было лучше понятно, посмотрите простые примеры:

user ~ $echo “1 2 3 4 5 6 7 8 9”

1 2 3 4 5 6 7 8 9

user ~ $echo “1 2 3 4 5 6 7 8 9” | xargs -n1

123456789

user ~ $echo “1 2 3 4 5 6 7 8 9” | xargs -n2

1 23 45 67 89

user ~ $echo “1 2 3 4 5 6 7 8 9” | xargs -n3

1 2 34 5 67 8 9

user ~ $echo “1 2 3 4 5 6 7 8 9” | xargs -n4

1 2 3 45 6 7 89

Для переименования файлов, очевидно, нам нужен ключик -n2, тогда xargs разделит поток из старых и новых имён в две колонки.

user test $find . -type f | sed 'p;s:filename:new:' | xargs -n2

./1-filename.txt ./1-new.txt./2-filename.txt ./2-new.txt./5-filename.txt ./5-new.txt./4-filename.txt ./4-new.txt./3-filename.txt ./3-new.txt

Отлично. Осталось перед каждой парой вставить mv, и переименование произойдёт. Выполняем:

user test $find . -type f | sed 'p;s:filename:new:' | xargs -n2 mv

Вывода никакого не последует, но переименование произошло. Чтобы быть уверенным в результате, можно произвести проверку перед выполнением этой команды. Для этого надо добавить ключ -p к xargs. Тогда утилита будет показывать, что она сделала бы без ключа -p. Можно нажимать Enter и просматривать, что собирается сделать команда. Изменения применены не будут.

user test $find . -type f | sed 'p;s:filename:new:' | xargs -n2 -p mv

mv ./1-filename.txt ./1-new.txt ?…

Если результаты устраивают, то нужно убрать ключ -p и повторить команду.

Пример №2

В директориях dir1/subdir1/, dir1/subdir2/,… dir5/subdir5/ лежат файлы filename.txt. Нужно вытащить их оттуда, но уже с разными именами.

dir1/subdir1/filename.txt → dir1-subdir1-filename.txtdir1/subdir2/filename.txt → dir1-subdir2-filename.txt…dir5/subdir5/filename.txt → dir5-subdir5-filename.txt

При необходимости создадим и очистим нашу экспериментальную директорию ~/test/ и создадим там необходимую структуру файлов:

user ~ $user ~ $user ~ $mkdir -p ~/test/rm ~/test/*cd ~/test/
user test $user test $mkdir -p dir{1..5}/subdir{1..5} touch dir{1..5}/subdir{1..5}/filename.txt

Итак, у нас получилось 25 файлов filename.txt в директориях dir1/subdir1/, dir1/subdir2,… dir5/subdir5/.

Пример №3

В директории лежат файлы, пронумерованные от 0 до 1001. Если их выводить командой ls, они будут отсортированы по имени не так, как этого хотелось бы. Добавим необходимое количество нулей в названия файлов.

0-filename.txt → 0000-filename.txt…50-filename.txt → 0050-filename.txt…150-filename.txt → 0150-filename.txt…1001-filename.txt → 1001-filename.txt

При необходимости создаём тестовую директорию и/или чистим её и создаём наши 1001 файл:

user ~ $user ~ $user ~ $mkdir -p ~/test/rm -r ~/test/*cd ~/test/
user test $touch {0..1001}-filename.txt

Можно действовать так (не лучший вариант).

user test $user test $user test $ls | sed 'p;s:\([0-9]\)-:000\1-:g' | xargs -n2 mvls | sed 'p;s:\([0-9][0-9]\)-:00\1-:g' | xargs -n2 mvls | sed 'p;s:\([0-9][0-9][0-9]\)-:0\1-:g' | xargs -n2 mv

Первая команда всем файлам, начинающимся с одной цифры, добавит 3 нуля. Вторая команда всем файлам, начинающимся с двух цифр, добавит 2 нуля. Третья команда всем файлам, начинающимся с трёх цифр, добавит 1 ноль.

Здесь использованы регулярные выражения в sed. Разберём конструкцию

\([0-9][0-9][0-9]\)-

  • означает, что нужно искать с начала имени
  • конструкция \(…\) позволяет заключённое в неё использовать как \1 в шаблоне замены
  • [0-9][0-9][0-9] означает три любые цифры подряд.
  • – — просто дефис.

Источник: //lisakov.com/blog/renaming-find-sed-xargs-mv/

Копирование, перемещение, переименование и удаление файлов и каталогов в Linux

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

Деятельность системного администратора Linux-систем неразрывно связана с работой в файловой системе. Т. е. с копированием, удалением, перемещением или переименованием файлов и каталогов. Естественно, все эти действия выполняются в командной строке.

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

Поэтому использование командной оболочки на сервере — необходимое и достаточное условие для выполнение задач по администрированию.

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

Основные команды для работы с файловой системой Linux

Существует всего несколько команд, которые позволяют гибко управлять файловой системой.  На этих командах основаны все файловые менеджеры из комплектов всевозможных графических оболочек для Linux- и UNIX-систем. Набор этих команд включает:

  • cd – перемещение по дереву каталогов файловой системы. В качестве параметра указывается пункт назначения — какой-либо каталог по относительному или абсолютному пути;
  • ls – просмотр содержимого каталога. По-умолчанию выводит содержимое текущего (активного) каталога, если целевой каталог не задан явно через параметр;
  • cp – копирование файлов и каталогов. Первым параметром является источник, вторым — конечный объект-копия;
  • rm – удаление файлов. Может использоваться и для удаления каталогов;
  • rmdir – удаление каталогов;
  • mv – перемещение или переименование файлов или каталогов. В качестве параметров указываются сначала источник, затем конечный объект. Для переименования абсолютные (или относительные) пути для источника и целевого объекта должны совпадать;
  • pwd – определение текущего (активного) каталога.

Итого команд меньше десятка, однако это внушительный арсенал.

Перемещение по дереву файловой системы

Чтобы попасть в нужное место файловой системы, например в каталог, в котором хранятся файлы настроек виртуальных хостов Apache, нужно дать команду (для Ubuntu, например):

$ cd /etc/apache2/sites-available/

Теперь команда pwd выведет этот путь, конечный каталог которого (sites-available) стал активным:

$ pwd
/etc/apache2/sites-available

Далее, командой ls можно просмотреть содержимое этого каталога и узнать, какие виртуальные хосты доступны веб-серверу:

$ ls
000-default.conf          default-ssl.conf          drupal7-devtest.conf drupal7-devtest.conf

Или, что, то же самое:

$ ls /etc/apache2/sites-available/С помощью команды ls можно также просматривать и скрытые файлы и каталоги (имена которых начинаются с символа точки), а также режимы доступа к ним, добавив ключи -a и -l.

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

Например, если требуется запустить какой-либо исполняемый файл (скрипт или программу) в текущем каталоге, то следует дать следующую команду:

$ ./somescript.sh

Или:

$ ./someprogram

Для перехода в каталог, уровнем выше:

$ cd ..

Перейти на два уровня выше:

$ cd ../../

Перейти в каталог somedir1, который находится в каталоге уровнем выше:

$ cd ../somedir1

Символ «~» используется для обозначения домашнего каталога текущего пользователя, например следующая команда:

$ cd ~/htdocs/drupal7-devtest/

переведёт пользователя в каталог с сайтом на CMS Drupal (к примеру…), находящуюся в директории htdocs его домашнего каталога. Если в имени файла или директории присутствуют символы пробела, то в этом случае необходимо такие фрагменты заключать в двойные кавычки:

$ cd ~/”build and tests/test1”$ pwd

/home/user/build and tests/test1

Действия с файлами и каталогами

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

Для использования команды cp в некоторых случаях необходимо, чтобы каталог источника был активным каталогом.

Для обработки нескольких файлов или каталогов можно применять маску для их выборки, а также рекурсию с помощью опции -R.

Копирование

Когда, к примеру, нужно создать конфигурацию нового виртуального хоста, то в этом случае проще всего воспользоваться копией существующей конфигурации по-умолчанию:

$ cp 000-default.conf drupal8-devtest.conf

Теперь можно вносить специфические для нового виртуального хоста настройки в файле drupal8-devtest.conf.

Для того, чтобы скопировать все файлы в какой-либо директории, очень желательно директорию-источник сделать активной, т. е. предварительно перейти в неё:

$ cd /etc/skel/
$ cp -Rp . ~/

В результате все файлы (со всеми поддиректориями и их содержимым) из директории /etc/skel/ скопируются в домашний каталог текущего пользователя. Ключ -R позволяет выполнять копирование рекурсивно, т. е. и для всех поддиректорий, ключ -p указывает команде cp сохранять информацию о владельце и режимах доступа к файлам.

По-умолчанию команда cp при копировании перезаписывает уже существующие файлы. Для того, чтобы заставить cp каждый раз запрашивать разрешение на перезапись нужно добавлять ключ -i (интерактивный режим). Можно также указать cp никогда не перезаписывать файлы — для этого служит ключ -n. Символ точки «.

» указывает обрабатывать все файлы в текущем каталоге.

Когда нужно скопировать определённые файлы, например, начинающиеся на «drupal» или с определённым расширением, можно воспользоваться заданием маски с помощью символа звёздочки «*»:

$ cd /etc/apache2/sites-available/$ cp -pi drupal* ~/backup

$ cp -pi *.conf ~/backup

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

Перемещение отличается от переименования тем, что при перемещении у источника и приёмника обязательно должны отличаться пути (абсолютный и/или относительный). При переименовании различаться может только имя файла/директории. Следующая команда:

$ mv drupal8-devtest.conf drupal8-devtest_back.conf

просто переименует файл drupal8-devtest.conf на drupal8-devtest_back.conf.

А команда:

mv drupal8-devtest.conf ~/backup/drupal8-devtest_back.conf

перенесёт тот же файл в директорию backup домашнего каталога текущего пользователя. И даст ему новое имя drupal8-devtest_back.conf.

Для переименования каталога, как и в случае с командой cp часто необходимо директорию, в которой происходит переименование или из которой осуществляется перемещение, нужно сделать активной:

$ cd ~/games
$ mv ./racer-0.5.0 ./racer

Перемещение файла (или каталога со всем его содержимым) в другое место нужно дать команду:

$ cd /home/downloads$ mv ./drupal-8.6.4.tar.gz ~/distro

$ mv ./my_sources ~/backup

Для команды mv можно также применять маску для отбора только конкретных файлов/каталогов:

$ mv -i *.txt ~/documents
$ mv -i data* ~/backup

Удаление

Команда rm – одна из самых опасных. При неосмотрительном и невнимательном её использовании можно удалить целую файловую систему, которую придётся потом восстанавливать. Для удаления какого-либо файла нужно выполнить следующую команду:

$ rm ~/domnloads/drupal-8.6.4.tar.gz

Очень рекомендуется использовать опцию -i:

$ rm -Ri ~/downloadsrm: спуститься в каталог '/home/user/downloads'? yrm: удалить обычный файл '/home/user/downloads/somefile.txt'? yrm: удалить каталог '/home/user/downloads/somefile.txt'? y

rm: удалить каталог '/home/user/downloads'? n

Данная команда кроме всех файлов и каталогов в директории downloads удалит также (по-умолчанию) и сам этот каталог. Поэтом крайне важно контролировать её действия с помощью опции -i. Также для команды rm можно использовать задание масок с помощью символа звёздочки.

Для ознакомления со всеми доступными для каждой из команд опциями следует использовать ключ —help для вывода краткой справки.

, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник: //ITProffi.ru/kopirovanie-peremeshhenie-pereimenovanie-i-udalenie-fajlov-i-katalogov-v-linux/

rename — инструмент командной строки для переименования нескольких файлов в Linux

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

Мы часто используем команду «mv» для переименования одного файла в Linux. Однако быстрое переименование нескольких файлов или тем более группы файлов достаточно сложная задача для выполнения в терминале.

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

Переименование нескольких файлов в Linux

Команда «rename» является частью скрипта Perl и находится в разделе «/usr/bin/» во многих дистрибутивах Linux. Вы можете запустить команду «which», чтобы узнать местоположение команды rename.

$ which rename /usr/bin/rename

Основной синтаксис команды переименования

rename 's/old-name/new-name/' files

Команда rename содержит несколько необязательных аргументов вместе с обязательными регулярными выражением для perl, которое указывают команде rename выполнять конкретные действия.

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

  • -v: Показать, имена успешно переименованных файлов.
  • -n: Показать, какие файлы были бы переименованы.
  • -f: Принудительно перезаписать существующие файлы.
  • perlexpr: регулярные выражения для Perl.

Для лучшего понимания этой утилиты мы обсудим несколько практических примеров этой команды в статье.

1. Пример базовой команды переименования

Предположим, у вас есть куча файлов с расширением «.html», и вы хотите переименовать все файлы в «.php» за один раз. Сначала выполните «ls -l», чтобы проверить список файлов с расширением «.html».

# [email protected]:~$ ls -l total 22532 -rw-rw-r– 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html -rw-rw-r– 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html -rw-rw-r– 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html -rw-rw-r– 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html -rw-rw-r– 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html -rw-rw-r– 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html -rw-rw-r– 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.

html

Теперь изменим расширение всех этих файлов с «.html» на «.php». Вы можете использовать следующую команду «rename» с регулярными выражением для perl, как показано ниже.

[email protected]:~$ rename 's/\.html$/\.php/' *.html

Примечание. В приведенной выше команде мы использовали два аргумента.

  • Первый аргумент — это выражение perl, которое заменяет .html на .php.
  • Второй аргумент — сообщает команде rename заменить все файлы на *.php.

Давайте проверим, все ли файлы переименованы в расширение .php, выполнив ls -l:

[email protected]:~$ ls -l total 22532 -rw-rw-r– 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.php -rw-rw-r– 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.php -rw-rw-r– 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.php -rw-rw-r– 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.php -rw-rw-r– 1 ravisaive ravisaive 938895 Oct 10 12:10 news.php -rw-rw-r– 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.php -rw-rw-r– 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.php

Выше вы видите, что все html файлы переименованы в php.

2. Проверьте изменения перед выполнением команды переименования

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

[email protected]:~$ rename -n 's/\.php$/\.html/' *.php cricket.php renamed as cricket.html entertainment.php renamed as entertainment.html health.php renamed as health.html lifestyle.php renamed as lifestyle.html news.php renamed as news.html photos.php renamed as photos.html sports.php renamed as sports.html

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

3. Вывод полной информации обо всех изменениях

Мы видели, что команда rename не отображает никакой информации об изменениях, которые она делает. Итак, если вы хотите получить информацию о команде переименования вы можете использовать флаг «-n», или же флаг «-v», чтобы вывести полную информацию обо всех изменениях, сделанных командой rename.

[email protected]:~$ rename -v 's/\.php$/\.html/' *.php cricket.php renamed as cricket.html entertainment.php renamed as entertainment.html health.php renamed as health.html lifestyle.php renamed as lifestyle.html news.php renamed as news.html photos.php renamed as photos.html sports.php renamed as sports.html

4. Преобразование регистров (верхний в нижний и наоборот)

Чтобы разом переименовать все файлы с именами написанными нижним регистром в верхний регистр, необходимо:

Нижний регистр в верхний:

[email protected]:~$ ls -l total 22532 -rw-rw-r– 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html -rw-rw-r– 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html -rw-rw-r– 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.

html -rw-rw-r– 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html -rw-rw-r– 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html -rw-rw-r– 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html -rw-rw-r– 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.

html

Просто используйте следующую команду с выражением perl.

[email protected]:~$ rename 'y/a-z/A-Z/' *.html

После выполнения вышеуказанной команды вы можете проверить изменения, выполнив «ls -l».

[email protected]:~$ ls -l total 22532 -rw-rw-r– 1 ravisaive ravisaive 6888896 Oct 10 12:10 CRICKET.HTML -rw-rw-r– 1 ravisaive ravisaive 588895 Oct 10 12:10 ENTERTAINMENT.HTML -rw-rw-r– 1 ravisaive ravisaive 6188895 Oct 10 12:10 HEALTH.HTML -rw-rw-r– 1 ravisaive ravisaive 6538895 Oct 10 12:10 LIFESTYLE.HTML -rw-rw-r– 1 ravisaive ravisaive 938895 Oct 10 12:10 NEWS.HTML -rw-rw-r– 1 ravisaive ravisaive 938937 Oct 10 12:11 PHOTOS.HTML -rw-rw-r– 1 ravisaive ravisaive 978137 Oct 10 12:11 SPORTS.HTML

Вы видите, что приведенная выше команда фактически переименовала все имена файлов нижнего регистра (с расширением .HTML) в верхний регистр.

Верхний регистр в нижний:

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

[email protected]:~$ rename 'y/A-Z/a-z/' *.HTML [email protected]:~$ ls -l total 22532 -rw-rw-r– 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html -rw-rw-r– 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html -rw-rw-r– 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html -rw-rw-r– 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html -rw-rw-r– 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html -rw-rw-r– 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html -rw-rw-r– 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.

html

5. Перезапись существующих файлов

Если вы хотите принудительно перезаписать существующие файлы, используйте параметр «-f», как показано в примере ниже.

[email protected]:~$ rename -f 's/a/b/' *.html

Если вы хотите узнать больше о команде rename, введите «man rename» в терминале.

Команда rename очень полезна, если вы имеете дело с многократным или групповым переименованием файлов из командной строки.

Спасибо за уделенное время на прочтение статьи!

Источник: //blog.sedicomm.com/2018/01/03/rename-instrument-komandnoj-stroki-dlya-pereimenovaniya-neskolkih-fajlov-v-linux/

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.