Неверные параметры при использовании find и csplit - PullRequest
1 голос
/ 03 октября 2019

Это должно быть простым заданием ...!

У меня есть каталог с несколькими html-файлами. У каждого есть div, вызываемый для класса с именем crumb. Я хочу разделить файл на два на crumb. Позже я объединю вторую часть файла с новой начальной частью.

Итак, я попытался разделить все html-файлы - на самом деле два файла с именами news.html и about.html на данный момент - по шаблону crumb:

find *.html -exec csplit - /crumb/ {} \;

НоУ меня есть такой ответ:

csplit: ‘about.html’: invalid pattern
csplit: ‘news.html’: invalid pattern

Почему имена файлов интерпретируются как шаблон?

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Вы можете получить представление о проблеме, добавив 'echo'

find *.html -exec echo csplit - /crumb/ {} \;

, которая покажет

csplit - /crumb/ about.html
csplit - /crumb/ news.html

При интерактивном выполнении этих команд возникает ошибка из вопроса: csplit: 'about.html ': неверный шаблон

При проверке csplit man он показывает использование:' csplit [OPTION] ... FILE PATTERN ... ', указывая, что первым параметром должно быть имя файла, а затемпо образцу. Команда, сгенерированная из приведенного выше сценария, включает имя файла ПОСЛЕ шаблона.

Предлагаемое исправление:

find *.html -exec  csplit  {} /crumb/ \;

# OR, with unique suffix for every file, and 3 digit suffix
find *.html -exec csplit --prefix {} --suffix-format='%03d' {} /crumb/ \;

, которое будет выполняться:

csplit about.html /crumb/
csplit news.html /crumb/

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

0 голосов
/ 03 октября 2019

Синтаксис команды csplit:

csplit [OPTION]... FILE PATTERN...

, но вы используете

csplit - PATTERN FILE

, где - - это «чтение из стандартного ввода» (вместо файла), а затем FILE интерпретируется как шаблон. Вместо этого:

find -name '*.html' -exec csplit {} /crumb/ \;

Обратите внимание, что *.html следует заключить в одинарные кавычки, или оболочка расширит его до того, как find увидит его.

...