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

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

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

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

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

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

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

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

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

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

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 в графическом интерфейсе.

Выводы

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


меняем.bak на.kab
rename "s/\.bak$/.kab/" *.bak

делаем все буквы маленькими
rename "y/A-Z/a-z/" *

Замена текста в файлах

Чтобы заменить в текстовом файле все вхождения последовательности символов “windows” на “linux” написать в консоли:
sed -i s/windows/linux/g /адрес/имя_файла

Если надо заменить текст не в одном файле, то есть несколько способов. Для того, чтобы заменить текст «Windows» на «Linux» во всех файлах в текущей директории, название которой начинается с «test», введите в консоли:
perl -i -pe "s/Windows/Linux/;" test*

Чтобы провести ту же операцию во всех поддиректориях:
find. -name "*.txt" -print | xargs perl -pi -e"s/Windows/Linux/ig" *.txt

Или вы хотите сделать то же самое для на обычных файлов со множеством переносов строк и странных символов (файл - в другой кодировке):
find -type f -name "*.txt" -print0 | xargs --null perl -pi -e "s/Windows/Linux/"

Удаление или замена пробелов в имени файла

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

ls | grep » » | while read -r f; do mv -i «$f» `echo $f | tr -d ‘ ‘`; done

В случае, если вам нужно заменить пробел в имени фала на подчеркивание (или любой другой символ), то используйте следующую команду:

ls | grep » » | while read -r f; do mv «$f» `echo $f | tr ‘ ‘ ‘_’`; done

Как это работает? ls и grep будут циклично обрабатывать все файлы в текущем рабочем каталоге, содержащие пробел в имени. В теле цикла, мы затем выполним команду mv, преобразуя месторасположения файла с помощью команды tr. Удостоверьтесь, что, при использовании команды mv, параметр -i включен, чтобы избежать случайной перезаписи файлов.

Преобразование имен фалов из нижнего регистра в верхний:

Эта команда преобразует имена всех файлов в текущем каталоге из нижнего регистра в верхний. Удостоверьтесь, что, при использовании команды mv, параметр -i включен, чтобы избежать случайной перезаписи некоторых файлов. Для командной строки Linux имена “File” и “file” – это разные файлы. Если вы преобразуете с помощью mv “file” в “FILE”, то вы перезапишете существующий “FILE”.

for i in $(ls | grep ); do mv -i $i `echo $i | tr ‘a-z’ ‘A-Z’`; done

Преобразование имен фалов из верхнего регистра в нижний:

Эта команда преобразует имена всех файлов в текущем каталоге из верхнего регистра в нижний. Удостоверьтесь, что, при использовании команды mv, параметр -i включен, чтобы избежать случайной перезаписи некоторых файлов. Для командной строки Linux имена “File” и “file” – это разные файлы. Если вы преобразуете с помощью mv “FILE” в “file”, то вы перезапишете существующий “file”.

for i in $(ls | grep ); do mv -i $i `echo $i | tr ‘A-Z’ ‘a-z’`; done

$ rename "s/\.c\.orig$/.c/" *.c # переименовать все *.c.orig в *.c
$ rename "y/A-Z/a-z/" *.JPG # имена фотографий маленькими буквами
$ rename "s/\U/\u/g" *.JPG # тоже самое
$ rename "$_=lc" * # тоже самое, но для всех файлов
$ rename "s/deftones-//" *.mp3 # убрать префис "deftones-" у *.mp3
$ rename "s/^/jerk-/" *.swf # добавить префикс "jerk-" у *.swf
$ rename "s/ /_/g" * # пробелы в именах файлах заменить на "_"
# перевести в большой регистр часть имени файла
$ rename -v "s/s\d.*e\d/\U$&\E/" House.M.D.s0*
House.M.D.s03e04.rus.avi renamed as House.M.D.S03E04.rus.avi
House.M.D.s03e05.rus.avi renamed as House.M.D.S03E05.rus.avi
House.M.D.s03e06.rus.avi renamed as House.M.D.S03E06.rus.avi
House.M.D.s03e07.rus.avi renamed as House.M.D.S03E07.rus.avi

Поиск и замена текста в нескольких файлах:

Чтобы заменить foo на bar в нескольких файлах, выполните следующую команду Perl:
> perl -pi~ -e "s/foo/bar/"

Оригинальные файлы при этом будут сохраны с именами filename~.
# perl -pi~ -e "s/ua.archive.ubuntu.com/mirror.yandex.ru/" /etc/apt/sources.list

Replace, входит в состав MySQL (т.е. должен быть установлен MySQL Server). В приведенном примере, в файле config.inc.php заменяются ВСЕ вхождения слова change-this-to-your.domain.tld на yourdomain.com
> replace "change-this-to-your.domain.tld" "yourdomain.com" -- config.inc.php

В файле collabnet_subversion_httpd.conf заменить на строку collabnet_subversion_httpd.conf. Используются утилиты sed:
> sed -i -e "s/ServerName 10.1.7.1:9876/ServerName 10.1.7.2:9876/" ./collabnet_subversion_httpd.conf


http://zenux.ru/articles/23/
переименовывает все файлы в текущем каталоге, заменяя пробелы на символы подчеркивания «_»:
$ find . -type f | while read i; do mv "$i" "$(echo "$i" | tr " " _)"; done

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

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

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

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

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

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

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

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.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: