А с самым старым файлом внизу?
Кроме того, если я сделаю это, можно ли удалить лишние заголовки, содержащиеся в каждом файле HTML? Я вижу, как объединяю много HTML-файлов, и было бы неплохо немного уменьшить размер конечного файла.
источник
А с самым старым файлом внизу?
Кроме того, если я сделаю это, можно ли удалить лишние заголовки, содержащиеся в каждом файле HTML? Я вижу, как объединяю много HTML-файлов, и было бы неплохо немного уменьшить размер конечного файла.
Для объединения файлов, которые вы используете
cat file1 file2 file3 ...
Чтобы получить список именованных файлов, отсортированных по времени, сначала самое новое, используйте
ls -t
Собираем все вместе,
cat $(ls -t) > outputfile
Возможно, вы захотите привести некоторые аргументы ls
(например, *.html
).
Но если у вас есть имена файлов с пробелами, это не будет работать. My file.html
предполагается, что будут два имени файла: My
и file.html
. Вы можете сделать ls
кавычки имен файлов, а затем использовать xargs
, кто понимает цитирование, для передачи аргументов cat
.
ls -tQ | xargs cat
Что касается вашего второго вопроса, отфильтровать части файлов не сложно, но это зависит от того, что именно вы хотите удалить. Что такое «избыточные заголовки»?
cat $(ls -t) > outputfile
, в противном случаеcat
отвергать процитированные имена файловcat $(ls -t)
также уязвим для расширения имени файла. Если есть имя файла с выражением*
, или?
, или выражение в скобках (напримерfile-[old].html
); и если имя файла, интерпретируемое как образец, совпадает с другими именами файла; подход приведет к неправильному списку.set -f
будет решать этот недостаток.ls -Q
может производить вывод, который не подходит дляxargs
. Например,"foo"
становится"\"foo\""
, но xargs не понимает экранированные двойные кавычки в строках с двойными кавычками.Самый простой способ перечисления файлов в порядке, отличном от лексикографического, - это с помощью квалификаторов глобуса zsh . Без zsh вы можете использовать
ls
, но анализ выходных данныхls
чреват опасностями .Если вы хотите удалить некоторые строки, используйте sed, awk или perl. Например, чтобы взять
<head>
из первого файла и комбинировать<body>
детали из других файлов, при условии , что<body>
и</body>
метки на отдельной строке в каждом файле:Объяснение:
concatenated.html
создается. Поэтому это самый молодой*.html
файл (при условии, что ни у одного файла нет даты в будущем).*.html
файла, но выйдите из</body>
строки.<body>
строки и начните со</body>
строки.источник
Решение, данное @angus, хорошо, но будет иметь проблемы, если в папке есть каталоги, это исправит это.
cat $(ls -tpa | grep -v / )
источник