Скопировать папку в любую директорию

В этой статье рассмотрим, как скопировать файл, папку, символическую ссылку или всё это вместе взятое сразу с помощью ISP-панели. Для того, чтобы продолжить, предлагаю освежить память, как работать с Менеджером файлов и как в нём выделить отдельно взятые элементы списка или произвольную группу объектов, находящихся в одной директории. Эти знания понадобится ниже.

Выделяем то, что будем копировать

Первым делом заходим «Менеджер файлов» в ISP-manager’а и находим то, что будем копировать. Это может быть отдельный файл, папка или symlink (символическая ссылка). Также можно выделить группу объектов, чтобы скопировать всё за один раз. После этого нужно нажать на кнопку «Копировать» в верхнем ряду кнопок управления:

Вкладка «Копировать» Менеджера файлов

После нажатия кнопки «Копировать» откроется вкладка «Копировать» в которой будет предложено:

Выбор конечного каталога копирования

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

Дополнительные опции копирования

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

  • «Перенести файлы» — опция для того, чтобы не создавать копии объектов, а перенести их из одной папки в другую.
  • «Перезаписать» — опция для того, чтобы заменить объекты при совпадении имён.
  • «Перейти в выбранный каталог» — удобная опция, которая позволяет после копирования попасть в ту папку, в которую били скопированные выделенные ранее объекты.

После того, как все настройки копирования выставлены, нужно кликнуть левой кнопкой мыши по кнопке «Ok»:

Завершение операции копирования

После того, как файлы будут скопированы, вкладка «Копировать» закроется и вновь откроется вкладка «Менеджер файлов». В зависимости от выбранных опций, выставленных во вкладке «Копировать» мы окажемся либо в той директории, из которой производилось копирование, либо в той, в которую производилось копирование (как на рисунке ниже):

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

Читайте также:  Прекращена работа программы odin windows 7

Как скопировать папку в cmd / how copy folder in cmd ?

Для копирования папки в cmd зайдите в командную строку:

1) Нажмите сочетание клавиш Windows+R

2) В открывшемся окне Выполнить наберите cmd

В командной строке вы можете воспользоваться командой copy или xcopy

Пример копирования пустой папки C : test _ copy в папку с: program files


Одно из отличий команды xcopy от copy – возможность копирования разрешения папки

xcopy /y /o /e "c: est copy*.*" "c:Program Files est copy*.*"

Ключ / Y – копирование без подтверждения, если папка уже существует.

Ключ / O – копирование разрешений на папку

Ключ / E – копирование каталогов с подкаталогами включая пустые

Полную справку по xcopy можно посмотреть набрав в командной строке –

xcopy /?

С копированием папок на английском языке все очень просто.

А как скопировать папку с русскими буквами в cmd ?

xcopy /y /o /e "c:Тестовая папка" "c:Program FilesТестовая папка*.*"

Если записать данную команду в bat или cmd файл скопировав в блокнот и сохранив с расширением cmd или bat то копирование работать не будет.

Результат работы команды

Для копирования папки с русским названием сохраните команду в файл прямо в командной строке

echo xcopy /y /o /e "c:Тестовая папка" "c:Program FilesТестовая папка*.* " >> c: est_copy.cmd

Русский текст адаптируется под соответствующую кодировку

Копирование будет работать штатно .

For copy folder in cmd, go to the command prompt:

1) Press keys Windows+R

2) In Run menu type cmd and press Enter

At the command prompt, you can use the copy or xcopy command

An example of copying empty folders C: est_copy in the folder C:Program files


One of the differences between xcopy and copy is the ability to copy folder permissions

xcopy /y /o / e "c: est copy*.*" "c:Program Files est copy *.*"

The /Y – switch copies without confirmation if the folder already exists.

Key /O – copy permissions to the folder

Key /E – copies directories and sub-directories including empty ones

Full help for xcopy can be found by typing in the command line –

xcopy /?

Copying folders in English is very simple.

And how to copy the folder with Russian letters in cmd?

Читайте также:  Принтер кэнон не включается что делать

xcopy /y /o /e "c:Тестовая папка" "c:Program FilesТестовая папка*.*"

If you write this command in bat or cmd file copied to Notepad and save with the extension cmd or bat then copying will not work.

Result run test_copy.cmd

To copy a folder with a Russian name, save the command to a file directly on the command line

echo xcopy /y /o /e "c: Тестовая папка " "c:Program Files Тестовая папка *.* " >> c: est_copy.cmd

The Russian text is adapted to the appropriate encoding

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

Допустим нам нужно скопировать всё из папки /source в папку /target.

Первое, что приходит на ум это:

Сразу исправим эту команду на:

Ключ -a добавит копирование всех аттрибутов, прав и добавит рекурсию. Когда не требуется точное воспроизведение прав достаточно ключа -r .

После копирования мы обнаружим, что скопировались не все файлы — были проигнорированы файлы начинающиеся с точки типа:

.profile
.local
.mc
и тому подобные.

Почему же так произошло?

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

Чтобы это изменение поведения сохранилось после перезагрузки, можно сделать файл wildcard.sh c этой командой в папке /etc/profile.d (возможно в вашем дистрибутиве иная папка).

А если в директории-источнике нет файлов, то shell не сможет ничего подставить вместо звёздочки, и также копирование завершится с ошибкой. Против подобной ситуации есть опции failglob и nullglob . Нам потребуется выставить failglob , которая не даст команде выполниться. nullglob не подойдёт, так как она строку с wildcards не нашедшими совпадения преобразует в пустую строку (нулевой длины), что для cp вызовет ошибку.

Однако, если в папке тысячи файлов и больше, то от подхода с использованием wildcards стоит отказаться вовсе. Дело в том, что bash разворачивает wildcards в очень длинную командную строку наподобие:

На длину командной строки есть ограничение, которое мы можем узнать используя команду:

Читайте также:  Сканер визиток для windows

Получим максимальную длину командной строки в байтах:

Получим что-то типа:

Итак, давайте будем обходиться вовсе без wildcards.

Давайте просто напишем

И тут мы столкнёмся с неоднозначностью поведения cp . Если папки /target не существует, то мы получим то, что нам нужно.

Однако, если папка target существует, то файлы будут скопированы в папку /target/source.

Не всегда мы можем удалить заранее папку /target, так как в ней могут быть нужные нам файлы и наша цель, допустим, дополнить файлы в /target файлами из /source.

Если бы папки источника и приёмника назывались одинаково, например, мы копировали бы из /source в /home/source, то можно было бы использовать команду:

И после копирования файлы в /home/source оказались бы дополненными файлами из /source.

Такая вот логическая задачка: мы можем дополнить файлы в директории-приёмнике, если папки называются одинаково, но если они отличаются, то папка-исходник будет помещена внутрь приёмника. Как скопировать файлы из /source в /target с помощью cp без wildcards?

Чтобы обойти это вредное ограничение мы используем неочевидное решение:

Те кто хорошо знаком с DOS и Linux уже всё поняли: внутри каждой папки есть 2 невидимые папки "." и "..", являющиеся псевдопапками-ссылками на текущую и вышестоящие директории.

  • При копировании cp проверяет существование и пытается создать /target/.
  • Такая директория существует и это есть /target
  • Файлы из /source скопированы в /target корректно.

Итак, вешаем в жирную рамочку в своей памяти или на стене:

Поведение этой команды однозначно. Всё отработает без ошибок вне зависимости от того миллион у вас файлов или их нет вовсе.

Выводы

Если нужно скопировать все файлы из одной папки в другую, не используем wildcards, вместо них лучше использовать cp в сочетании с точкой в конце папки-источника. Это скопирует все файлы, включая скрытые и не завалится при миллионах файлов или полном отсутствии файлов.

Послесловие

vmspike предложил аналогичный по результату вариант команды:

ВНИМАНИЕ: регистр буквы T имеет значение. Если перепутать, то получите полную белиберду: направление копирования поменяется.
Благодарности:

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>