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

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

3gp       avi       fb2       jpg       mp3       pdf      

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


Как скопировать структуру папок в Windows 10

Как скопировать структуру папок в Windows 10

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

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

Копировать структуру папок

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

Откройте окно командной строки. Вам не нужны права администратора для копирования структуры папок, если только вы не планируете создавать / копировать структуру на диск C, который обычно является диском Windows.

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

Синтаксис

XCOPY ‘Путь к корневой папке’ ‘Путь к папке назначения’ / T / E

Пример

XCOPY ‘C: UsersfatiwOneDriveDesktopMy Тестовая папка’ D: / T / E

Первый путь — папка, в которую я поместил папку, структуру которой я хочу скопировать. Во втором пути я хочу скопировать его в корневой каталог диска D.

/ T — это переключатель и Это то, что говорит Xcopy копировать только структуру папок, а не файлы в ней. / E указывает Xcopy также включать пустые папки. Конечно, вы можете запустить команду без ключа / E, и структура скопированных папок будет включать в себя только те папки, в которых есть файлы.

Xcopy — довольно мощный инструмент, и для него доступна документация, подробно различные переключатели, которые вы можете использовать с ним. Этот инструмент не предназначен только для копирования папок. Если у вас есть сложная команда копирования, которую вам нужно запустить, этот инструмент — первое, что вы должны проверить. Он уже присутствует в вашей системе и включен в системный путь, поэтому вы можете выполнять команды Xcopy непосредственно из любой папки.

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

Как скопировать структуру папок в Windows 10

Просмотров сегодня: 175

Как правильно скопировать файлы и папки исключая некоторые из них / Хабр

Топик написан в ответ на похожий.

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

Но главная проблема этого подхода в другом — он не соответствует идеологии unix: сложные задачи решаются комбинацией простых утилит.

Под катом подробности о методах решения этого класса задач — не рассматривайте это как готовый рецепт.

0. Декомпозиция

Решение любой комплексной задачи начинается с разбора её на составные части. Итак нам нужно скопировать некоторый набор файлов предварительно его отфильтровав.
Значит — получение списка файлов, фильтрация, копирование.
1. Получение списка файлов

Обычно мы просматриваем список файлов программой ls. Её вывод выглядит примерно так:

$ ls -1 dir1 dir2 file1.bin file2.txt 

Подходит ли там такой вывод? Нет, потому, что в нем недостаточно информации — нам нужно копировать файлы рекурсивно, значит для нас было-бы гораздо удобнее если первая в нашей цепочке программа выдала там имена файлов вместе с путями.

Следующая программа, которая приходит на ум — find

$ find ./ ./ ./dir1 ./dir1/file7.txt ./dir2 ./file1.bin ./file2.txt 

Уже лучше но в вывод попали и директории, а они нам не нужны. Попробуем так:
$ find ./ -type 'f' ./dir1/file7.txt ./file1.bin ./file2.txt 

Вот то, что там нужно. Список файлов.

2. Фильтрация

Этот список файлов нужно отфильтровать. Перенаправим вывод нашей предыдущей комманды в программу grep.

$ find ./ -type 'f' | grep 2 ./dir2 ./file2.txt 

Хорошо, но в условиях задачи стоит исключать файлы, так что немного поменеяем наш конвейер

$ find ./ -type 'f' | grep -v 2 ./dir1/file7.txt ./file1.bin 

Первые две части выполнены.

3. Копирование

Из man-страницы для команды cp мы можем узнать, что исходный файл нужно передавать программе cp в качестве аргумента, а мы пока можем только перенаправить список на стандартный ввод.
Применим утилиту xargs — она принимает стандартный ввод и вызывает указанную программу с параметрами из стандартного ввода. Итак:

$ find ./ -type 'f' | grep -v 2 | xargs -n 1 -I % cp --parents "%" /path/to/dest/dir/ 

-n 1 значит, что только одна строка из стандартного ввода подставляется в комманду, а -I % — определяет символ, который будет заменен в целевой комманде на строчку из стандартного ввода. В нашем случае это будет
 cp --parents "./dir1/file7.txt" /path/to/dest/dir/ cp --parents "./file1.bin" /path/to/dest/dir/ 

Можно считать, что задача решена.

Вместо заключения

Я надеюсь что это описание поможет правильно подходить к решению как таких простых так и более комплексных задач.

Хочется отметить, что

  • Это топик способах решения задач и немного о применении конвейера, а не о копировании файлов
  • Этот способ далеко не едиственный и даже не самый короткий, а наиболее наглядный для демонстрации методологии решения.
  • В случае этой конкретной задачи будет быстрее воспользоваться find ./ -type f ! -name "*2*" -exec cp --parents -t /target/dir "{}" \+
  • Лично я воспользовался-бы tar --exclude=2 -cf - ./ | ( cd /path/to/dest/ && tar -xvf - )
  • Т.к. это первый мой топик, буду рад конструктивной критике

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

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

folder1 folder2 folder3 data.zip info.txt abc.xyz folder4 folder5 data.zip somefile.exe someotherfile.dll 

файлы данные.zip и информация.txt может отображаться везде в структуре каталогов. Как скопировать полную структуру каталогов, но включать только файлы с именем data.ZIP и информация.txt (все остальные файлы следует игнорировать)?

полученная структура каталогов должна выглядеть так это:

copy_of_folder1 folder2 folder3 data.zip info.txt folder4 folder5 data.zip 

15 ответов


вы не упоминаете, должен ли он быть только пакетным, но если вы можете использовать ROBOCOPY, попробуйте это:

ROBOCOPY C:\Source C:\Destination data.zip info.txt /E 

EDIT: изменено до /E включить пустые папки.


альтернативное решение, которое копирует один файл за раз и не требует ROBOCOPY:

@echo off setlocal enabledelayedexpansion set SOURCE_DIR=C:\Source set DEST_DIR=C:\Destination set FILENAMES_TO_COPY=data.zip info.txt for /R "%SOURCE_DIR%" %%F IN (%FILENAMES_TO_COPY%) do ( if exist "%%F" ( set FILE_DIR=%%~dpF set FILE_INTERMEDIATE_DIR=!FILE_DIR:%SOURCE_DIR%=! xcopy /E /I /Y "%%F" "%DEST_DIR%!FILE_INTERMEDIATE_DIR!" ) ) 

оператор outer for генерирует любую возможную комбинацию подкаталогов пути в SOURCE_DIR и имя FILENAMES_TO_COPY. Для каждого существующего файла вызывается xcopy. FILE_INTERMEDIATE_DIR содержит путь к подкаталогу файла в SOURCE_DIR который необходимо создать в DEST_DIR.


попробуйте трубопроводный выход find (ie. путь к файлу) в cpio

find . -type f -name '*.jpg' | cpio -p -d -v targetdir/ 

cpio проверяет метку времени в целевых файлах - так что это безопасно и быстро.

remove-v для более быстрого op, как только вы привыкнете к нему.