Работа с масками имен файлов/каталогов
Маски имен файлов - удобный и простой инструмент для "фильтрации" данных. С помощью масок легко указать - какие файлы и каталоги надо обрабатывать, а какие следует "пропустить" при обработке. В работе с масками пять "тонкостей":
Сначала разберемся с первым пунктом. Бывают случаи, когда удобно разделить маски на маски имен файлов и имен каталогов. Например, мы хотим скопировать все *.htm файлы из каталога c:\data и всех его подкаталогов. Нет ничего проще, воспользуемся включающей маской имени файла:
nnbackup.exe -i c:\data -o d:\backup -s -m *.htm
Расшифровка: копировать все htm-файлы из каталога c:\data и всех его подкаталогов в каталог d:\backup.
А как быть, если мы при этом хотим исключить подкаталог c:\data\wrong_data из обработки? Вот тут, как раз и приходит на помощь исключающая маска имени подкаталога:
nnbackup.exe -i c:\data -o d:\backup -s -m *.htm -dx "wrong_data"
Расшифровка: копировать все htm-файлы из каталога c:\data и всех его подкаталогов (кроме подкаталога c:\data\wrong_data) в каталог d:\backup.
Второй пункт. Как вы уже поняли из предыдущего примера, маски могут быть включающими и исключающими. Работа с исключающими масками не вызовет затруднений: копируются все файлы, кроме тех, что подпадают под исключающую маску. Например:
nnbackup.exe -i c:\data -o d:\backup -x *.txt
Расшифровка: копировать все файлы кроме файлов с расширением txt из каталога c:\data в каталог d:\backup.
Включающая маска, напротив, определяет какие именно файлы должны копироваться:
nnbackup.exe -i c:\data -o d:\backup -m *.htm*
Расшифровка: копировать только файлы с расширением htm и html из каталога c:\data в каталог d:\backup.
Включающие и исключающие маски можно использовать одновременно.
Переходим к третьему пункту. Самые простые маски - это маски созданные с помощью символа '*', который заменяет собой любое количество любых букв и цифр. Скажем, под маску '*test' подпадут слова 'test', 'contest', '123test', но не подпадет словa 'test123' и 'test_one'. Ну, а под маску '*test*' подпадут все слова указанные в предыдущем примере и все остальные слова, начинающиеся с 'test', содержащие 'test' внутри или заканчивающиеся на 'test'.
В качестве маски можно использовать не только метасивол '*', но и т. н. регулярные выражения (regex) - мощное средство составления шаблонов, с помощью которых в заданном тексте может проводиться поиск и сопоставление символов любой сложности. С синтаксисом регулярных выражений можно поближе познакомиться здесь. Чтобы задать маску с помощью регулярных выражений, просто окружите ее символами '/' (прямой слеш) - '/.../'.
nnbackup.exe -i c:\data -o d:\backup -m "/\d*\.htm/"
Расшифровка: копировать только файлы с расширением htm и именем, состоящим из любого количества цифр, из каталога c:\data в каталог d:\backup.
Четвертый пункт. В качестве аргументов к опциям -m, -dm, -x и -dx в командной строке можно указывать сразу несколько масок через запятую:
nnbackup.exe -i c:\data -o d:\backup -m *.htm*,*.css,*.gif,*.jpeg
Расшифровка:копировать из каталога c:\data в каталог d:\backup файлы с расширениями htm, html, css, gif и jpeg.
nnbackup.exe -i c:\data -o d:\backup -x *.txt,*.doc,*.rtf,*.pdf
Расшифровка: копировать из каталога c:\data в каталог d:\backup все файлы, кроме файлов с расширениями txt, doc, rtf и pdf.
В качестве аргумента для опций -m, -dm, -x и -dx в командной строке можно указывать имя текстового файла, в котором находится набор масок. В качестве разделителя используется перевод строки. Например, мы можем создать текстовой файл doc.msk с таким содержимым:
*.txt
*.doc
*.rtf
Теперь имя этого файла можно использовать в качестве аргумента для опций -m, -dm, -x и -dx:
nnbackup.exe -i c:\data -o d:\backup -m @doc.msk
Расшифровка:копировать из каталога c:\data в каталог d:\backup файлы с расширениями txt, doc, rtf и pdf.
nnbackup.exe -i c:\data -o d:\backup -x @doc.msk
Расшифровка: копировать из каталога c:\data в каталог d:\backup все файлы, кроме файлов с расширениями txt, doc, rtf и pdf.
Возможность считывать маски из текстового файла бывает очень полезной, когда приходится часто использовать одни и теже "наборы" масок или когда список файлов для обработки генерируется специальной внешней программой.
Вот еще один пример текстового файла с масками - в нем собраны временные файлы, индексы, а также маски, включающие каталоги:
*.~* *.bkp *.bak
*.nsx *.ntx *.idx
*\temp*\* *\external*\*
Обратите внимание, что маски имени файла и маски имени каталога можно использовать одновременно, например для того, чтобы исключить один или несколько каталогов:
nnbackup.exe -i c:\data -o d:\backup -s -m *.htm -dx "wrong_*,*temp*"
Расшифровка: копировать все htm-файлы из каталога c:\data и всех его подкаталогов (кроме подкаталогов, начинающихся с 'wrong_' и подкаталогов, содержащих в имени 'temp') в каталог d:\backup.
Ну, и последний, пятый пункт: в понятие "маска имени файла/каталога" может входить не только имя файла/каталога, но и его относительный путь (считая от исходного каталога). Это предоставляет пользователю дополнительную свободу при создании масок. Правила здесь простые: если в созданной вами маске имени файла/каталога присутствует символ '\' (обратный слеш), то вся маска сравнивается с относительным путем. Если обратного слеша в маске нет, то она сравнивается только с именем файла/каталога.
Учитывание относительного пути в маске позволяет включать/исключать целые подкаталоги и файлы, которые в них содержатся. Например, если в каталоге с:\data есть подкаталог images, то я могу задать такую маску:
nnbackup.exe -i c:\data -o d:\backup -m *.exe,*images\* -s
Расшифровка: копировать все исполняемые файлы и все содержимое каталога images из каталога c:\data и всех его подкаталогов в каталог d:\backup.
При включении/исключении целых каталогов бывает удобно пользоваться и включающими и исключающими масками одновременно. Модифицируем предыдущий пример, чтобы из подкаталога images не копировались файлы с расширением bmp:
nnbackup.exe -i c:\data -o d:\backup -m *.exe,*images\* -x *images\*.bmp -s
Расшифровка: копировать все исполняемые файлы и все содержимое каталога images (кроме файлов с расширением bmp) из каталога c:\data и всех его подкаталогов в каталог d:\backup.