Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как скопировать файлы из нескольких папок в одну


windows - Копирование всех файлов из нескольких папок в одну папку

Непонятно, как банкомат, так что это обходной метод ...

Если бы вы заархивировали дерево (используя метод без сжатия, это было бы быстрее), вы могли бы работать с ним двумя способами. Архивируйте дерево (включая подкаталоги) и извлекайте его с помощью буквы "E" (извлечение), а не "X" (файлы eXtract с полным путем), извлеченные файлы будут помещены в один каталог. Другой способ сделать то же самое было бы при создании архива, чтобы сказать ему "исключать пути из имен". Тогда созданный архив будет лишен путей, то есть все файлы будут храниться в одном каталоге в архиве, поэтому при извлечении они будут извлекаться также и таким образом. (Мышление первого метода имеет больше смысла.)

(ARJ может сделать это. Может подумать, что 7z & RAR & ZIP тоже могут?)

"Flatten" было словом, которое я пытался придумать ранее. И с этим программа резервного копирования / синхронизации, вероятно, может быть настроена на "выравнивание" структуры каталогов.

Итак, другие мысли ... Tar & DD? Может быть, это поможет другим придумать лучший ответ, что я не думаю об банкомате.

(Прошло много времени с тех пор, как я использовал Tar, поэтому я могу покинуть базу, но что-то вроде ...)

 tar -cvf c:/foo/roo | tar -xvf - 

Архиватор и резервное копирование / синхронизатор должны иметь возможность обрабатывать любые ошибки в автоматическом режиме.
ARJ может. Не знаете про смолу?

правильное копирование папок с файлами в *nix / Блог компании RUVDS.com / Хабр

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

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

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

cp /source/* /target

Сразу исправим эту команду на:
cp -a /source/* /target

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

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

.profile
.local
.mc

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

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

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

shopt -s dotglob

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

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

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

cp -a /souce/a /source/b /source/c …… /target

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

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

Или:
xargs --show-limits

Получим что-то типа:
…. Maximum length of command we could actually use: 2089314 ….

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

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

cp -a /source /target

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

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

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

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

cp -a /source /home

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

Чтобы обойти это вредное ограничение мы используем неочевидное решение:
cp -a /source/. /target

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

Итак, вешаем в жирную рамочку в своей памяти или на стене:
cp -a /source/. /target

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

Выводы


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

vmspike предложил аналогичный по результату вариант команды:
cp -a -T /source /target

Oz_Alex
cp -aT /source /target

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

Благодарности:
  • Компании RUVDS.COM за поддержку и возможность публикации в своем блоге на Хабре.
  • За изображение TripletConcept. Картинка очень большая и детальная, можно открыть в отдельном окне.

P.S. Замеченные ошибки направляйте в личку. Повышаю за это карму.

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

Если вам нужно скопировать файл в несколько папок, вы можете удерживать нажатой клавишу Ctrl и перетаскивать файл или папку в каждую папку, в которую вы хотите их скопировать.

Это отнимает много времени, так как вам все еще нужно перенести файл в каждую отдельную папку, в которую вы хотите скопировать файл (или папку).

Если вам нужно скопировать файл в несколько папок, и существует множество папок, в которые нужно скопировать файл, вы можете использовать пакетный файл и делать все это за один раз.

Скопируйте файл в несколько папок

Этот скрипт имеет одно ограничение; папки, в которые вы копируете файл, должны находиться в одной папке.

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

Откройте Блокнот и вставьте в него следующее.

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

@echo off
 for /D %%a in ("path-to-folder\*.*") do xcopy /y /d path-to-file\file.FileExt "%%a\"

Первое редактирование, которое вам нужно сделать, — это путь (“path-to-folder\*.*”).

Измените этот путь на путь к папке, в которой находятся другие папки.

Например, допустим, у вас есть папка с именем Games, а внутри три папки с именами 1, 2 и 3.

В этом случае вам нужно ввести полный путь к папке Games. Оставьте *. * в конце и не снимайте скобки или кавычки.

Второе редактирование, которое вам нужно сделать, — это путь path-to-file \ file.FileExt.

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

Включите имя файла и его расширение.

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

Сохраните файл блокнота с расширением BAT и запустите его.

Файл будет скопирован во все подпапки.

Пример

Вот как выглядит код после того, как я отредактировал его, чтобы скопировать файл с именем MyFile.txt, расположенный в C:\Users\fatiw\Desktop\Test, во все подпапки в C:\Users\fatiw\Desktop\Newfolder.

@echo off
 for /D %%a in ("C:\Users\fatiw\Desktop\Newfolder\*.*") do xcopy /y /d C:\Users\fatiw\Desktop\Test\MyFile.txt "%%a\"

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

Отредактированный код выглядит так;

for /D %a in ("c:\path-to-folder\*.*") do xcopy /y /d c:\test\file.FileExt "%a\"

Мы сделали только два изменения в нем; @echo off был удален, а один из знаков% был удален.

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

Поделитесь статьей:

Как скопировать файл в несколько папок сразу

Копировать файлы путем перетаскивания гораздо удобнее и быстрее, чем с помощью традиционного Copy-Paste. Функция Drag-and-Drop также позволяет копировать объекты в разные папки, удерживая при этом зажатой клавишу Ctrl, но как ни крути, это занимает намного больше времени, чем если бы копирование производилось во все выбранные папки одновременно. Представьте, что вам нужно скопировать некий файл во все вложенные папки какого-то каталога, причем количество этих вложенных папок достигает нескольких десятков.

Понятно, что ни Copy-Paste, ни Drag-and-Drop не позволят вам сделать это за минуту, здесь нужен более продвинутый метод.

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

Скопируйте приведенный ниже код и вставьте его в обычный текстовый файл.

@echo off
 for /D %%a in ("C:\Data\*.*") do xcopy /y /d "D:\Im.jpg" "%%a"
 

В коде скрипта есть два пути C:\Data и D:\Im.jpg, первый — это путь к каталогу со всеми вложенными в него папками, в которые будет копироваться файл, второй — это путь к копируемому объекту, служить которым может не только файл, но и папка.

Замените пути своими и сохраните отредактированный файл с расширением BAT или CMD.

Название скрипта оставляем на ваше усмотрение.

Запустите скрипт и файл будет скопирован в дочерние папки указанного родительского каталога до первого уровня вложенности.

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

Команда COPY для копирования одного или нескольких файлов.

Команда COPY при работе в командной строке позволяет копировать один или несколько файлов. Команда имеет синтаксис: COPY[/D][/V][/N][/Y | /-Y][/Z][/L][/A | /B]источник[/A | /B][+ источник[/A | /B] [+ ...]][результат [/A | /B]]. Источником является имя копируемого файла, а результатом является каталог, в который будет помещена копия этого файла и/или имя создаваемого файла.

Для примера, создадим на диске «С» какой-нибудь файл (я создал текстовый файл «robot.txt»), а на диске «D» какую-нибудь папку (я создал папку «folder1»). Тогда команда для копирования файла «robot.txt» в папку «folder1» выглядит так: copy robot.txt d:\folder1

Если необходимо скопировать файл, изменив при этом его имя, необходимо записать следующую команду: copy robot.txt d:\folder1\file.txt В этом случае, файл «robot.txt» будет скопирован в папку «folder1», но уже с именем «file.txt».

Для того чтобы скопировать все файлы с выбранным расширением, необходимо вместо названия файла поставить звездочку «*». Например, создадим на диске «С» какую-нибудь папку (я создал папку «papka») и скопируем в нее все текстовые файлы из папки «folder1», расположенной на диске «D». Команда будет иметь вид: copy d:\folder1\*.txt c:\papka

Если в качестве [результата] не указывать каталог, то команда copy скопирует файл (или файлы) и поместит их в текущем каталоге. При этом скопированные файлы будут иметь то же имя, дату и время создания, что и исходный файл. Например, создадим в папке «folder1», расположенной на диске «D» текстовый файл с именем «robot1.txt». После этого в командной строке изменим текущий каталог с «C:\>» на «C:\Papka». Тогда команда copy d:\folder1\robot1.txt скопирует файл «robot1.txt» из папки «folder1» и поместит его в текущем каталоге, т.е. в папку «papka», расположенную на диске «C». Причем, имя, дата и время создания скопированного файла будет идентично исходному файлу.

Для того чтобы скопировать все файлы из определенного каталога, необходимо вместо названия файла поставить звездочку «*» и вместо расширения файла поставить звездочку «*». Например, создадим в папке «folder1» несколько файлов, имеющих различные расширения (документ Word, архив Rar и т.д.). Тогда команда для копирования всех файлов из папки «folder1» на диск «C» будет выглядеть: copy d:\folder1\*.* c:\

[Источником] или [результатом] копирования могут выступать не только файлы, но и различные устройства компьютера. В Windows поддерживаются следующие имена устройств:

  • LPT1 – LPT3 (параллельные порты).
  • COM1 – COM3 (последовательные порты).
  • CON (терминал, при выводе это экран компьютера, при вводе – клавиатура).
  • PRN (принтер).
  • AUX (устройство, подсоединяемое к последовательному порту 1).

Например, с помощью командной строки и команды «copy» можно создать текстовый файл и записать в него информацию: copy con f1.txt. Команда copy con f1.txt создаст текстовый файл «f1.txt» и скопирует в него  символы, которые вы будете вводить с клавиатуры.

После ввода команды copy con f1.txt нажимаем Enter и вводим слова, которые необходимо сохранить (я ввел command com). После ввода необходимо поставить признак конца файла (нажать Ctrl+Z).
C помощью команды copy можно объединять несколько файлов в один файл. Например, создадим на диске «C» два файла f2.txt и f3.txt (файл f1.txt мы создали ранее) и запишем в эти файлы какую-нибудь информацию. Тогда команда copy f1.txt+f2.txt+f3.txt d:\f4.txt скопирует содержимое файлов «f1.txt», «f2.txt», «f3.txt» в файл «f4.txt», который будет автоматически создан на диске «D».

Если при объединении файлов не указывать файл - [результат], то вся информация будет сохранена в первом файле. Например, команда copy f1.txt+f2.txt+f3.txt добавит к содержимому файла f1.txt содержимое файлов f2.txt и f3.txt

Ключ /Y отключает вывод сообщения о замене файлов.  По умолчанию, при копировании файлов, если такой файл существует, то на экран выводится сообщение с предупреждением о замене. Пользователь может согласиться с заменой (нажать Y) или не согласиться (нажать N). Ключ /Y отключает это сообщение и копирование происходит сразу. Для примера создадим на диске «C» файл vov.txt и скопируем его на диск «D»: copy vov.txt d:\
Затем скопируем этот файл еще раз. При этом выводится сообщение «Заменить d:\vov.txt [Yes (да)……»
После этого скопируем файл еще раз, употребив ключ /Y. Сообщение выводиться не будет.

Ключ /Y может присутствовать в значении переменной среды окружения COPYCMD. Т.е. по умолчанию, при замене файлов сообщение выводиться не будет. В этом случае, для того чтобы сообщение выводилось необходимо использовать ключ /-Y.


Предыдущая статья: Команда ATTRIB для изменения атрибутов файла.
Оглавление: Командная строка.
Следующая статья: Команда XCOPY.


копирование файлов и папок .

Команда COPY используется для копирование одного или нескольких файлов в командной строке Windows.

Формат командной строки:

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B] источник [/A | /B] [+ источник [/A | /B] [+ ...]] [результат [/A | /B]]

источник - Имена одного или нескольких копируемых файлов.

/A - Файл является текстовым файлом ASCII.

/B - Файл является двоичным файлом.

/D - Указывает на возможность создания зашифрованного файла

результат - Каталог и/или имя для конечных файлов.

/V - Проверка правильности копирования файлов.

/N - Использование, если возможно, коротких имен при копировании файлов, чьи имена не удовлетворяют стандарту 8.3.

/Y - Подавление запроса подтверждения на перезапись существующего конечного файла.

/-Y - Обязательный запрос подтверждения на перезапись существующего конечного файла.

/Z - Копирование сетевых файлов с возобновлением. Ключ /Y можно установить через переменную среды COPYCMD.

Ключ /-Y командной строки переопределяет такую установку.

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

Команда copy позволяет объединить несколько файлов в один. Чтобы объединить файлы, укажите один конечный и несколько исходных файлов, используя подстановочные знаки или формат "файл1+файл2+файл3+...".

По умолчанию, используется копирование файлов как двоичных "один в один", поэтому параметр /B можно не задавать. Параметр /A необходим, если в результатах копирования должны обрабатываться специальные символы, применяемые в текстовых файлах.

Ключ /N используется для совместимости с программами MS-DOS, не поддерживающих длинные имена файлов.

Примеры использования COPY:

copy /? - выдать справку об использовании команды.

copy file1.txt file2.txt - копировать файл file1.txt в файл file2.txt в текущем каталоге. Если файл file2.txt существует, то пользователю будет выдан запрос на подтверждение перезаписи существующего файла.

copy /Y file1.txt file2.txt - то же самое, что и в предыдущем примере, но запрос на подтверждение перезаписи существующего файла не выводится.

copy *.txt D:\oldfiles\*.txt - копирование всех файлов с расширением txt из текущего каталога в каталог D:\oldfiles

copy file1.txt + file2.txt +file3.txt file123.txt - копировать содержимое файлов file1.txt, file2.txt и file3.txt в файл file123.txt

copy C:\ndldr "D:\My Backup\system\ntldr" - при использовании имен файлов или каталогов, содержащих пробелы, используются двойные кавычки.

COPY /V file.bin A:\saved.bin - выполнить копирование файла на дискету A: с проверкой результата.

&nbsp &nbsp Команда COPY может применяться для копирования файлов с использованием стандартных устройств ввода-вывода:

Copy con myfile.txt - копирование с устройства con (console , консоль) в файл myfile.txt - т.е. ввод символов непосредственно с клавиатуры в файл. Для завершения ввода используется признак конца файла CTRL+Z (или нажатие F6 )

copy NUL newfile.txt - копирование с фиктивного устройства nul в файл, т.е. создание пустого файла с именем newfile.txt

copy movie.avi nul - копировать файл на фиктивное устройство nul, т.е. просто чтение файла, иногда используемое в качестве средства тестирования носителей данных.

Весь список команд CMD Windows

Копирование нескольких файлов из нескольких папок в одну с помощью R

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
.

macos - копирование файлов из нескольких папок в одну

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд
.

Gulp: копирование файлов из нескольких папок в одну

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

windows - как скопировать несколько файлов в папку с помощью xcopy

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

Как скопировать файл в несколько папок в PowerShell

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических талантов и стройте йо
.

Смотрите также