- Рекурсивный mv с сохранением структуры каталогов возможен?
- Копирование, перемещение, переименование и удаление файлов и каталогов в Linux
- Основные команды для работы с файловой системой Linux
- Перемещение по дереву файловой системы
- Действия с файлами и каталогами
- Копирование
- Перемещение и переименование файлов
- Удаление
- Команда mv
- Описание команды mv
- Синтаксис
- Опции
- Примеры использования команды mv
- Переместить файл
- Переименовать файл
- Переименовать директорию
- Создавать резервные копии существующих файлов
- Переместить несколько файлов
- Переместить только те файлы, которых нет в директории назначения
- Переместить только те файлы, которые новее
- Если в имени файла есть пробелы
- Linux переместить файлы по маске
Рекурсивный mv с сохранением структуры каталогов возможен?
Приветствую, о глубокоуважаемый Олл!
Предистория: битые mp3 в коллекции. mp3diags отказался править — при запуске видит файлы, но на запуск диагностики/починки отвечал что не видит файла. Следующим инструментом стал mp3val и строчкой:
#find -name *mp3 -type f -exec mp3val -f ‘<>‘ \;
Были исправлены mp3 а старые заботливо переименованы в *.bak
Встала задча: все *bak из дерева перенести в дерево С сохранением структуры.
Гугль решить эту задачу не помог. Из всего что нашел только вриант копирования с помощью команды cp с опцией —parents и удаление запуком потом rm вместо cp, но для 50Gb файлов на zfs это грустное зрелище.
Есть в linux инструментарий позволяющий переместить файлы по маске из дерева кталогов в новое дерево с сохранением структуры и прав/аттрибутов файлов/каталогов? Интересует именно перенос а не копирование/удаление. Зачем ворочать 50G файлов если можно просто сменить имя.
rsync -a —remove-source-files —exclude ‘*.mp3’
UPD: Хотя нет, он же будет копировать, а потом удалять. Ну можно набросать однострочник.
Если создание удаление не устраивает в виду времени выполнения, может попробовать через хардлинки? find bla bla bla exec прокатит?
UPD: Хотя нет, он же будет копировать, а потом удалять
Источник
Копирование, перемещение, переименование и удаление файлов и каталогов в Linux
Деятельность системного администратора Linux-систем неразрывно связана с работой в файловой системе. Т. е. с копированием, удалением, перемещением или переименованием файлов и каталогов. Естественно, все эти действия выполняются в командной строке. Поскольку для сервера использование графических оболочек является неоправданной тратой системных ресурсов. Серверная машина должна предоставлять только исчерпывающий инструментарий для выполнения возлагаемых на неё задач. Поэтому использование командной оболочки на сервере — необходимое и достаточное условие для выполнение задач по администрированию. Какой бы «недружелюбной» и на первый взгляд «неудобной» была системная консоль, но выполнение в ней таких элементарных действий как работа с файлами и каталогами определяет основу системного администрирования.
Основные команды для работы с файловой системой Linux
Существует всего несколько команд, которые позволяют гибко управлять файловой системой. На этих командах основаны все файловые менеджеры из комплектов всевозможных графических оболочек для Linux- и UNIX-систем. Набор этих команд включает:
- cd – перемещение по дереву каталогов файловой системы. В качестве параметра указывается пункт назначения — какой-либо каталог по относительному или абсолютному пути;
- ls – просмотр содержимого каталога. По-умолчанию выводит содержимое текущего (активного) каталога, если целевой каталог не задан явно через параметр;
- cp – копирование файлов и каталогов. Первым параметром является источник, вторым — конечный объект-копия;
- rm – удаление файлов. Может использоваться и для удаления каталогов;
- rmdir – удаление каталогов;
- mv – перемещение или переименование файлов или каталогов. В качестве параметров указываются сначала источник, затем конечный объект. Для переименования абсолютные (или относительные) пути для источника и целевого объекта должны совпадать;
- pwd – определение текущего (активного) каталога.
Итого команд меньше десятка, однако это внушительный арсенал.
Перемещение по дереву файловой системы
Чтобы попасть в нужное место файловой системы, например в каталог, в котором хранятся файлы настроек виртуальных хостов Apache, нужно дать команду (для Ubuntu, например):
Теперь команда pwd выведет этот путь, конечный каталог которого (sites-available) стал активным:
Далее, командой ls можно просмотреть содержимое этого каталога и узнать, какие виртуальные хосты доступны веб-серверу:
Или, что, то же самое:
С помощью команды ls можно также просматривать и скрытые файлы и каталоги (имена которых начинаются с символа точки), а также режимы доступа к ним, добавив ключи -a и -l. Нужно заметить, что в случае использования опции -a также будут показаны псевдокаталоги с именами «.» и «. .», обозначающие текущий и каталог уровнем выше соответственно. Например, если требуется запустить какой-либо исполняемый файл (скрипт или программу) в текущем каталоге, то следует дать следующую команду:
Для перехода в каталог, уровнем выше:
Перейти на два уровня выше:
Перейти в каталог somedir1, который находится в каталоге уровнем выше:
» используется для обозначения домашнего каталога текущего пользователя, например следующая команда:
переведёт пользователя в каталог с сайтом на CMS Drupal (к примеру…), находящуюся в директории htdocs его домашнего каталога. Если в имени файла или директории присутствуют символы пробела, то в этом случае необходимо такие фрагменты заключать в двойные кавычки:
Действия с файлами и каталогами
Некоторые команды для их полноценного использования должны выполняться с применением дополнительных ключей и механизмов. Например, команда rmdir не сможет удалить директорию, если она не пуста. Для использования команды cp в некоторых случаях необходимо, чтобы каталог источника был активным каталогом. Для обработки нескольких файлов или каталогов можно применять маску для их выборки, а также рекурсию с помощью опции -R.
Копирование
Когда, к примеру, нужно создать конфигурацию нового виртуального хоста, то в этом случае проще всего воспользоваться копией существующей конфигурации по-умолчанию:
Теперь можно вносить специфические для нового виртуального хоста настройки в файле drupal8-devtest.conf.
Для того, чтобы скопировать все файлы в какой-либо директории, очень желательно директорию-источник сделать активной, т. е. предварительно перейти в неё:
В результате все файлы (со всеми поддиректориями и их содержимым) из директории /etc/skel/ скопируются в домашний каталог текущего пользователя. Ключ -R позволяет выполнять копирование рекурсивно, т. е. и для всех поддиректорий, ключ -p указывает команде cp сохранять информацию о владельце и режимах доступа к файлам. По-умолчанию команда cp при копировании перезаписывает уже существующие файлы. Для того, чтобы заставить cp каждый раз запрашивать разрешение на перезапись нужно добавлять ключ -i (интерактивный режим). Можно также указать cp никогда не перезаписывать файлы — для этого служит ключ -n. Символ точки «.» указывает обрабатывать все файлы в текущем каталоге.
Когда нужно скопировать определённые файлы, например, начинающиеся на «drupal» или с определённым расширением, можно воспользоваться заданием маски с помощью символа звёздочки «*»:
Перемещение и переименование файлов
Перемещение отличается от переименования тем, что при перемещении у источника и приёмника обязательно должны отличаться пути (абсолютный и/или относительный). При переименовании различаться может только имя файла/директории. Следующая команда:
просто переименует файл drupal8-devtest.conf на drupal8-devtest_back.conf.
перенесёт тот же файл в директорию backup домашнего каталога текущего пользователя. И даст ему новое имя drupal8-devtest_back.conf.
Для переименования каталога, как и в случае с командой cp часто необходимо директорию, в которой происходит переименование или из которой осуществляется перемещение, нужно сделать активной:
Перемещение файла (или каталога со всем его содержимым) в другое место нужно дать команду:
Для команды mv можно также применять маску для отбора только конкретных файлов/каталогов:
Удаление
Команда rm – одна из самых опасных. При неосмотрительном и невнимательном её использовании можно удалить целую файловую систему, которую придётся потом восстанавливать. Для удаления какого-либо файла нужно выполнить следующую команду:
Очень рекомендуется использовать опцию -i:
Данная команда кроме всех файлов и каталогов в директории downloads удалит также (по-умолчанию) и сам этот каталог. Поэтом крайне важно контролировать её действия с помощью опции -i. Также для команды rm можно использовать задание масок с помощью символа звёздочки.
Для ознакомления со всеми доступными для каждой из команд опциями следует использовать ключ —help для вывода краткой справки.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Команда mv
Описание команды mv
Команда mv используется для перемещения одного или нескольких файлов (или директорий) в другую директорию, а также для переименования файлов и директорий.
Синтаксис
исходные_файлы — это то, что мы будем перемещать или переименовывать. То есть это либо один файл, либо несколько файлов, либо директория, либо несколько директорий.
куда — это название директории, в которую мы перемещаем исходные файлы или директории. Или же это новое название файла или директории, если выполняется переименование. То есть это либо директория, либо новое название файла или директории.
Команда mv может:
- Переместить один или несколько файлов в другую директорию.
- Переместить одну или несколько директорий в другую директорию.
- Переименовать файл.
- Переименовать директорию.
Опции
- none или off — не делать резервных копий, даже если включена опция —backup
- numbered или t — имя резервной копии получит числовой индекс (пример: myfile.txt
).
Примеры использования команды mv
Рассмотрим несколько примеров использования команды mv в Linux.
Рекомендуется всегда использовать опцию -v , чтобы получать информацию о том, что именно команда mv делает с файлами.
Также крайне рекомендуется использовать опцию -i , чтобы выдавался запрос на перезапись существующих файлов. В примерах ниже мы эти опции опускаем.
Переместить файл
Переместим файл myfile1.txt в директорию mydir/ (директория должна существовать). Для этого выполняем команду без каких-либо аргументов:
Переименовать файл
Переименуем файл myfile1.txt в myfile2.txt :
Переименовать директорию
Переименуем директорию mydir1 в mydir2 . Выполняется точно также, как и переименование файлов.
Создавать резервные копии существующих файлов
Предположим, что нам нужно переименовать файл myfile1.txt в myfile2.txt , но файл myfile2.txt уже существует. Можно воспользоваться опцией -b , чтобы создать резервную копию существующего файла:
В результате сначала существующий файл myfile2.txt будет переименован в myfile2.txt
, то есть будет создана его резервная копия, и только потом файл myfile1.txt будет переименован в myfile2.txt .
Вместо значка тильда
можно добавлять к именам резервных копий произвольный суффикс. Например, добавим суффикс .bak . Для этого воспользуемся опцией -S
Переместить несколько файлов
Рассмотрим примеры использования команды mv для перемещения нескольких файлов в другую директорию.
Переместим сразу три файла в директорию mydir/
Переместим все файлы из текущей директории в директорию mydir/
Переместим все файлы с расширением .jpg в директорию mydir/
Переместить только те файлы, которых нет в директории назначения
Предположим, что нам нужно переместить все файлы из одной директории в другую, но если в директории назначения уже есть файлы с такими же именами, то их не перемещать. Для этого используем опцию -n
Переместить только те файлы, которые новее
Предположим, что нам нужно переместить все файлы из одной директории в другую, но если в другой директории уже есть файлы с такими же именами, то заменять существующие файлы только если исходный файл новее (по дате). Для этого используем опцию -u
Если в имени файла есть пробелы
Если в имени файла есть пробелы, то имя файла нужно заключить в кавычки или перед каждым пробелом добавлять символ \
Предположим, что нам нужно переименовать файл в имени которого содержится пробел — My file1.txt . Для этого можно заключить имя файла в кавычки (для файла назначения аналогично).
Или использовать символ косой черты перед пробелом.
Источник
Linux переместить файлы по маске
При выполнении операций копирования и перемещения (или переименования) файлов вы имеете возможность изменить имена копируемых или перемещаемых файлов. Для этого вы должны задать маску для имен файлов-источников и маску для имен файлов, которые будут созданы (файлы-приемники). Обычно эта вторая маска представляет собой несколько символов замены (wildcards) в конце строки, определяющей место назначение создаваемых файлов. Задание масок осуществляется в строках ввода, отображаемых в окне, появляющемся после обращения к командам копирования / переноса (рис. 6.6).
Все файлы, удовлетворяющие маске источника, будут переименованы (скопированы или перемещены с новыми именами) в соответствии с маской файла-приемника. Если имеются помеченные файлы, то копируются (перемещаются) только помеченные файлы, удовлетворяющие заданной маске для файлов-источников.
Рис. 6.6. Диалоговое окно для переименования файлов
Есть еще несколько опций, которые влияют на выполнение операций копирования/перемещения файлов, и которые устанавливаются в том же окне запроса, где задаются маски имен файлов, либо через команду меню Настройки | Конфигурация .
Опция Разименовывать ссылки (Follow links) определяет, будут ли при копировании жестких или символических ссылок в каталоге-приемнике (и рекурсивно в подкаталогах) создаваться такие же ссылки, или будут копироваться файлы (и подкаталоги), на которые эти ссылки указывают.
Опция Внутрь каталога, если есть (Dive into subdirs) определяет, что делать, если в каталоге-приемнике уже существует подкаталог, имя которого совпадает с именем файла (каталога), который копируется (источника). По умолчанию (опция отключена) содержимое каталога-источника копируется в каталог-приемник. Если опция включена, то в каталоге приемнике будет создан новый подкаталог с тем же именем, в который и будет осуществляться копирование.
Лучше показать это на примере. Пусть вы хотите скопировать содержимое каталога one в каталог /two/one, который уже существует. Обычно (опция отключена) mc будет просто копировать все файлы из one в /two/one. Если опцию включить, копирование файлов будет производиться в /two/one/one.
Опция Сохранять атрибуты (Preserve attributes) определяет, будут ли при копировании/перемещении сохранены атрибуты исходного файла: права доступа, временные метки и, если вы root, UID и GID исходного файла. Если опция отключена, атрибуты будут установлены в соответствии с текущим значением umask.
На процедуры копирования и перемещения файлов оказывает также влияние установка опции Образцы в стиле shell в меню Настройки / Конфигурация. Когда эта опция включена, вы можете использовать символы замены (wildcards) ‘*’ и ‘?’ в маске источника. Они обрабатываются аналогично тому, как это делается в shell. В маске приемника разрешается использовать только ‘*’ и ‘\ цифра > ‘. Первый символ ‘*’ в маске приемника соответствует первой группе символов замены в маске источника, второй символ ‘*’ соответствует второй группе и т. д. Аналогично, символ замены ‘\1’ соответствует первой группе символов замены в маске источника, символ ‘\2’ — второй группе и т. д. Символ ‘\0’ соответствует целому имени файла-источника. Приведем пару примеров.
Пример 1 . Если маска источника «*.tar.gz», а маска приемника — «/two/*.tgz», и имя копируемого файла — «foo.tar.gz», копия будет называться «foo.tgz» и будет находиться в каталоге «/two».
Пример 2. Предположим, вы хотите поменять местами имя и расширение файла, так чтобы «file.c» стал файлом «c.file». Маска источника для этого должна иметь вид «*.*», а маска приемника — «\2.\1».
Когда опция Образцы в стиле shell ( » Use shell patterns ” ) выключена, mc не осуществляет автоматической группировки. Для указания групп символов в маске источника, которые будут соответствовать символам замены в маске приемника, вы должны в этом случае использовать скобки ‘\(. \)’. Этот способ более гибкий, но требует больше усилий при вводе. Снова приведем два примера
Пример 3 . Если маска источника имеет вид «^\(.*\)\.tar\.gz$», копирование производится в «/two/*.tgz» и копируется файл «foo.tar.gz», то результатом будет «/two/foo.tgz».
Пример 4 . Предположим, что вы хотите поменять местами имя файла и его расширение, так чтобы имена вида «file.c» приняли вид «c.file».
Маска источника для этого — «^\(.*\)\.\(.*\)$», а маска приемника — «\2.\1».
При выполнении операций копирования/перемещения вы можете также преобразовать регистр символов в именах файлов. Если вы используете ‘\u’ или ‘\l’ в маске приемника, то следующий символ имени будет образован в верхнем (заглавные символы) или нижнем (строчные) регистре соответственно.
Если использовать в маске приемника ‘\U’ или ‘\L’, то к соответствующему регистру будут преобразованы все последующие символы, вплоть до следующего вхождения ‘\L’ или ‘\U’, или же до конца имени файла.
Применение ‘\u’ и ‘\l’ обеспечивает более широкие возможности, чем ‘\U’ и ‘\L’.
Например, если маска источника есть ‘*’ (опция Образцы в стиле shell включена) или ‘^\(.*\)$’ (опция Образцы в стиле shell выключена), а маска приемника есть ‘\L\u*’, имена файлов будут преобразованы таким образом, что первые буквы имени будут заглавными, а все остальные — строчными.
Символ ‘\’ в масках используется для отмены специальной интерпретации отдельных символов. Например, ‘\\’ означает просто обратный слэш (как литерал) и ‘\*’ означает просто звездочку (asterisk).
Источник