Копирование, перемещение, создание и удаление файлов и каталогов. Основы линукс: Введение в 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.