Копирование файлов по маске

Обновлено: 07.07.2024

Как насчет что-то вроде этого в bash:

вы можете проверить это, поставив Эхо перед командой CP:

Чтобы сделать это эффективно с большим количеством файлов, это лучше, чтобы избежать запуска процесса различного СР для каждого из них. Один из способов скопировать переименовать их, используя prename ( переименовать - это символические ссылки на них для по умолчанию в дистрибутивах, основанных на Debian). Используя этот и Linux mktemp :

На самом деле Пакс может быть лучший способ пойти сюда:

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

"тар" сделает это для вас очень быстро.

Сначала я создал 2 папки и 10 файлов:

Затем я скопировал их:

Преобразование

Поэтому смолы ГНУ ` будет принимать СЭД --преобразование=выражение` для переименования файлов. Это даже может переименовать только некоторые файлы. Например:

Трансляция

Также считают, что это только два " тар " процессов - и это не будет изменять независимо от вашего количество файлов.

"тар" так же оптимизирована как вам хотелось бы, чтобы это было. Этого никогда не будет проблемы на счету аргумент или беглых дочерних процессов. Это просто а > Б сделано.

Я использую 7 различных аргументов в сочетании между двумя моими " тар " процессы здесь. Наиболее важным из перечисленных здесь первым:

- поток stdout/stdin с - об этом сообщает "тар", что она будет течь либо его ввода или вывода или из стандартный ввод/стандартный вывод , который он будет интерпретировать правильно в зависимости от того, является ли здание или самораспаковывающийся архив.

-с создать - это говорит " тар " для создания архива. Следующий аргумент " тар " ожидает.

-Ф файл - мы указываем, что " ТАР "будет работать с "файл" объекта, а не кассета-устройство или любой другой. И файл он будет работать с, как отмечалось выше, составляет стандартный ввод/стандартный вывод - другими словами, наш |трубы .

*`./ все $ФРД/файлы** - не слишком много, чтобы объяснить здесь, за исключением того, что аргумент архиве приходит первым, так что - то ./*`.

. и на другой стороне |трубы .

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

-х экстракт - после " тар " изменения в наш каталог, и получает наши переименования инструкции мы поручаем это, чтобы начать извлекать все файлы в текущем каталоге с-ф - |труб` архивный файл. Никакой тайны.

Звезда активна
Звезда активна
Звезда активна
Звезда активна
Звезда не активна

Сегодня я хочу поделиться с вами одним из приемов копирования файлов. Бывает ситуация, когда нужно найти и скопировать определённые файлы на компьютере, конечно, можно воспользоваться поиском, но это не всегда удобно и приемлемо. Например, нам нужно скопировать все файлы с расширением txt удаленно или просто через консоль, тогда и приходит на помощь данный метод: нужно открыть терминал (Пуск -> Выполнить и набрать cmd), после чего набрать команду для рекурсивного копирования файлов (xcopy) и передать ей параметр S, благодаря которому не будут копироваться пустые папки.

Так же данный метод копирования позволяет сохранить файлы с одинаковым именем, так как копируется и иерархия папок. У команды xcopy несколько больше возможностей, задаваемых параметрами ее вызова. Полный список параметров и их описание можно найти в справке по команде, набрав в терминале help xcopy. Аналогичные действия можно выполнить и в ОС Linux, арсенал которой намного богаче, чем у Windows. В Linux для рекурсивного копирования всех файлов, имеющих расширение txt из указанной папки, необходимо воспользоваться двумя командами: cp - копирование файлов и find - для поиска нужных файлов.

Также вы можете указать параметр r для того, чтобы избежать потери дублирующихся файлов и сохранить иерархию папок, как в случае с xcopy в ОС Windows.

Переместить файлы по маске в папки, соответствующие маскам


В источнике выделяется энное количество папок, в которых есть файлы.
В получателе открывается другая папка.
Как из выбранных в источнике папок скопировать/переместить только содержащиеся в них файлы, а не сами папки? (тип файлов не имеет значения).
Знаю, можно использовать поиск в выбранных папках. Потом вывести найденный файлы на панель и нажать F6. Это долго! Ответ ещё проще. Открыть в исходной панели корневую папку, включающую всё необходимое, перейти в режим показа файлов без подкаталогов (Ctrl+B) - и копировать. Но если в разных исходных подкаталогах есть одноимённые файлы, хорошенький конфликт имён при копировании гарантирован. Внимательно следить за запросами на перезапись!

TOTAL COMMANDER 9

'=================== VBS ===================
' Переместить файлы из каталога под курсором
' в папки с именами соответствующих им масок
' Параметр: %V
'===========================================
Option Explicit: Dim Filt, Fold, FSO, ShAp, Items, Mask, Name, Path
'===================== Маски файлов через "|" =====================
Filt = "1*.*|*name*|name*.txt|name 1.txt|name 1*.txt|name *1.*|" &_
"*2*|2.txt|name2.txt|name 2.txt|name *2.txt|name 2*.*|name 2.*|" &_
"*3*.txt|name 3.*|name3.txt|name 4.txt|name *4*.txt|*5*|*5*.txt"
'==================================================================
Fold = WScript.Arguments(0)
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FolderExists(Fold) Then WScript.Quit
Set ShAp = CreateObject("Shell.Application")
Set Fold = ShAp.NameSpace(Fold)
Set Items = Fold.Items
For Each Mask in Split(Filt, "|")
Items.Filter 73920, Mask
If Items.Count Then
Name = Replace(Mask, "*", ChrW(-246))
Path = Fold.Self.Path & "\" & Name
If Not FSO.FolderExists(Path) Then Fold.NewFolder(Name)
ShAp.NameSpace(Path).MoveHere Items
End If
Next

4 коммент.:

Total Commander - поиск нескольких файлов одновременно

достаточно в строке поиска (Alt + F7) указать имена файлов через точку с запятой - ;

Если к примеру расширения файлов неизвестны:
Код: [Выделить]
logo*;MSI*

Выделение файлов в Total Commander

Вот посмотрите на скриншоте, какие доступны способы выделения:

Выделение по заданному шаблону

Пример 1: w*.*|*.bak *.old - выделить все файлы, которые начинаются с w и не заканчиваются .bak или .old.

Выделить по расширению

Как я уже писал, Total Commander имеет очень мощный функционал для работы с файлами. Очень часто необходимо произвести какое-то действие с группой файлов:

копирование/перемещение/перенос на ФТП
переименование
удаление
архивирование и т. д.
Но для начала файлы необходимо выделить. Есть несколько вариантов:

Я когда-то тоже сталкивался с поиском большого числа файлов из списка в подкаталогах. Пытался это сделать поиском, но в связи с ограничением строки, нашлось два решения
1.Если файл список содержит конкретные файлы (без звёздочек)
- cm_DirBranch (раскрытие подпапок)
- cm_LoadSelectionFromFile (загрузка выделения из файла)
- cm_ShowOnlySelected (показать только выделенное)
вот и все искомые файлы на панели.

2 способ. Использование плагина FileX, где в ini файле я вписал около 4000 файлов по дести секциям по 400 файлов
секция_1=(400 файлов разделённые ":")
секция_2=.
.

В строке можно использовать "*", "?", "|"
Дальше настраиваешь новый набор колонок - и в результате нужные файлы видны
Можно сделать шаблон для поиска, с помощью которого можно
- искать по шаблону
- выделять по шаблону
- копировать по шаблону
.
Может это не совсем то, но мне помогло когда-то (смотря конечно какие файлы и маски)

Команда XCOPY используется для копирования файлов и каталогов с сохранением их структуры. По сравнению с командой COPY имеет более широкие возможности и является наиболее гибким средством копирования в командной строке Windows

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

XCOPY источник [целевой_объект] [/A | /M] [/D[:дата]] [/P] [/S [/E]] [/V] [/W] [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/EXCLUDE:файл1[+файл2][+файл3]. ]

Параметры командной строки:

источник - Копируемые файлы.

целевой_объект - Расположение или имена новых файлов.

/A - Копирование только файлов с установленным архивным атрибутом; сам атрибут при этом не изменяется.

/M - Копирование только файлов с установленным архивным атрибутом; после копирования атрибут снимается.

/D:m-d-y - Копирование файлов, измененных не ранее указанной даты. Если дата не указана, заменяются только конечные файлы, более старые, чем исходные.

/EXCLUDE:файл1[+файл2][+файл3]. - Список файлов, содержащих строки с критериями для исключения файлов и папок из процесса копирования. Каждая строка должна располагаться в отдельной строке файла. Если какая-либо из строк совпадает с любой частью абсолютного пути к копируемому файлу, такой файл исключается из операции копирования. Например, указав строку \obj\ или .obj, можно исключить все файлы из папки obj или все файлы с расширением OBJ соответственно.

/P - Вывод запросов перед созданием каждого нового файла.

/S - Копирование только непустых каталогов с подкаталогами.

/E - Копирование каталогов с подкаталогами, включая пустые. Эквивалентен сочетанию ключей /S /E. Совместим с ключом /T.

/V - Проверка размера каждого нового файла.

/W - Вывод запроса на нажатие клавиши перед копированием.

/C - Продолжение копирования вне зависимости от наличия ошибок.

/I - Если целевой объект не существует и копируется несколько файлов, считается, что целевой объект задает каталог.

/Q - Запрет вывода имен копируемых файлов.

/F - Вывод полных имен исходных и целевых файлов.

/L - Вывод имен копируемых файлов.

/G - Копирование зашифрованных файлов в целевой каталог, не поддерживающий шифрование.

/H - Копирование, среди прочих, скрытых и системных файлов.

/R - Перезапись файлов, предназначенных только для чтения.

/T - Создание структуры каталогов без копирования файлов. Пустые каталоги и подкаталоги не включаются в процесс копирования. Для создания пустых каталогов и подкаталогов используйте сочетание ключей /T /E.

/U - Копирование только файлов, уже имеющихся в целевом каталоге.

/K - Копирование атрибутов. При использовании команды XСOPY обычно сбрасываются атрибуты "Только для чтения".

/N - Использование коротких имен при копировании.

/O - Копирование сведений о владельце и данных ACL.

/X - Копирование параметров аудита файлов (подразумевает ключ /O).

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

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

/Z - Копирование сетевых файлов с возобновлением.

/B - Копирование символической ссылки вместо ее целевого объекта.

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

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

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

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

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

Что означает D:\copy1:
имя файла или каталога
(F = файл, D = каталог)? D

После ответа D целевой каталог будет создан и копирование будет выполняться в D:\COPY1\. Для подавления запроса на создание целевого каталога используется параметр /I:

xcopy C:\users D:\copy1 /I

xcopy C:\users D:\copy1 /H /Y /C - копирование файлов, включая скрытые и системные, с подавлением запроса на перезапись существующих и возобновлением при ошибке. Если существующий в целевом каталоге файл имеет атрибут "Только чтение", то копирование не выполняется. Для перезаписи таких файлов используется ключ /R

xcopy C:\users D:\copy1 /H /Y /C /R /S - скопировать все файлы и подкаталоги ( /S ) с перезаписью существующих без запроса ( /Y ) , включая скрытые и системные. ( /H ) с перезаписью файлов с атрибутом "Только чтение" (/R) и игнорированием ошибок ( /C )

xcopy C:\users D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt - то же, что и в предыдущем случае, но текстовый файл C:\users\listnotcopy.txt задает признаки исключения из процедуры копирования. Пример содержимого файла:

\User1\ - исключить из копирования каталог C:\users\user1
All Users исключить из копирования каталог C:\users\All Users
de*.* - исключить из копирования все файлы и каталоги, начинающиеся на буквосочетание "de"

xcopy C:\users\*.exe D:\copy1 /H /Y /C /R /S /EXCLUDE:C:\users\listnotcopy.txt - то же, что и в предыдущем примере, но выполняется только копирование исполняемых файлов с расширением .exe .

xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I - копирование всех файлов с расширением .ini из каталога временных файлов в каталог D:\copy1\ini\ . Если целевой подкаталог \ini\ не существует, то он будет создан без запроса пользователю ( /I ) .

xcopy %TEMP%\*.ini D:\copy1\ini /H /Y /C /R /S /I /D:09-16-2013 - то же, что и в предыдущем примере, но выполняется копирование только тех файлов, у которых установлена дата изменения 16 сентября 2013 года и старше.

xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T - создать структуру папок диска C: в каталоге D:\copy1\LISTDIR . Копирование файлов не выполняется. Копируются только папки, включая пустые, скрытые и системные.

xcopy C:\ D:\copy1\LISTDIR /H /Y /C /R /S /I /E /T /D:09-16-2013 воссоздать в каталоге D:\copy1\LISTDIR структуру папок диска C: , с датой изменения 16 сентября 2013 года и позже.

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

В разделе Примеры показан принцип использования этой команды.

Синтаксис

Параметры

Комментарии

Использование /z

Если вы потеряли подключение на этапе копирования (например, если сервер переходит в режим «вне сети»), то после повторного подключения Подключение возобновится. /z также отображает процент выполнения операции копирования для каждого файла.

Использование /y в переменной среды копикмд.

В переменной среды КОПИКМД можно использовать параметр /y . Эту команду можно переопределить с помощью /-и в командной строке. По умолчанию выводится запрос на перезапись.

Копирование зашифрованных файлов

Копирование зашифрованных файлов на том, который не поддерживает EFS, приводит к ошибке. Сначала расшифровать файлы или скопировать их на том, который поддерживает EFS.

Чтобы добавить файлы, укажите один файл для назначения, но несколько файлов для источника (то есть с помощью подстановочных знаков или формата file1 + file2 + файл3).

Значение по умолчанию для назначения

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

Указание того, является ли назначение файлом или каталогом

Нажмите клавишу F, если хотите скопировать файл или файлы в файл. Нажмите клавишу D, если хотите скопировать файл или файлы в каталог.

Использование команды xcopy для установки атрибута архива для целевых файлов

Команда xcopy создает файлы с установленным атрибутом Archive, независимо от того, был ли этот атрибут задан в исходном файле. Дополнительные сведения об атрибутах файлов и attribсм. в разделе Дополнительные ссылки.

Сравнение xcopy и diskcopy

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

Коды выхода для команды xcopy

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

Примеры

1. чтобы скопировать все файлы и подкаталоги (включая все пустые подкаталоги) с диска A на диск B, введите:

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

3. чтобы обновить файлы в каталоге \репортс с файлами в каталоге \равдата, которые были изменены с 29 декабря 1993 г., введите:

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

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

Файл xcopy. out содержит список всех копируемых файлов.

6. чтобы скопировать каталог \кустомер и все подкаталоги в каталог \\публик\аддресс на сетевом диске H:, оставьте атрибут "только для чтения" и при создании нового файла в H: введите:

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

Чтобы использовать предыдущую пакетную программу для копирования всех файлов в каталоге К:\пргмкоде и его подкаталогов на диск B, введите:

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

В предыдущем примере это конкретное значение исходного параметра .\ток *. yml копирует те же три файла, даже если их два символа пути . \ были удалены. Однако файлы не копируются, если из исходного параметра был удален подстановочный знак «звездочка», что делает его просто .\ток.ИМЛ.

Читайте также: