Intereting Posts
Одиночная команда для проверки наличия файла и печати (настраиваемого) сообщения для stdout? Проблема с форматированием даты «sed» Как правильно выбрать параметры в разделе «Ядро криптографического API»? Автоматически устанавливать атрибут append для вновь созданных файлов / папок? Как использовать rsync или scp для эффективной копирования файлов с machineB и machineC в machineA? Где я могу найти конфигурацию сервера, которую я использую, чтобы отправлять электронные письма с sendmail в CentOS 5.6? Только поддержка VNC в локальной сети скрипт ssh для входа на сервер и пароль пользователя root Объединить и передать как параметр, bash Как получить экран входа в систему через VNC в Oracle Linux? эхо-текст после команды curl на той же строке подмножество файла для правильных хромосом Почему не мой nat-не применять к правилам прохода? sed для печати шаблона, который охватывает линии Несколько записей tmpfs в fstab

Как объединить все файлы в заданном каталоге по дате, где я хочу, чтобы самый новый файл был сверху?

И с самым старым файлом внизу?

Кроме того, если я это сделаю, можно ли также вырезать избыточные заголовки, содержащиеся в каждом 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 

Что касается вашего второго вопроса, то отфильтровать части файлов не сложно, но это зависит от того, что именно вы хотите вырезать. Что такое «избыточные заголовки»?

Самый простой способ перечисления файлов в порядке, отличном от лексикографического, – с квалификаторами zsh glob . Без zsh вы можете использовать ls , но анализ вывода ls чреват опасностями .

 cat *(om) 

Если вы хотите разбить несколько строк, используйте sed или awk или perl. Например, чтобы взять <head> из первого файла и объединить части <body> с другими файлами, считая, что теги <body> и </body> находятся в одной строке в каждом файле:

 { sed -e '/<\/body>/ q' *.html(om[2]) sed -e '1,/<body>/ d' -e '/<\/body>/,$ d' *.html(om[3,-1]) echo '</body>' echo '</html>' } >concatenated.html 

Объяснение:

  • Сначала создается concatenated.html . Поэтому это самый младший *.html файл (если в будущем файл не имеет даты.
  • Затем скопируйте из второго-младшего *.html файла, но закройте строку </body> .
  • Затем скопируйте из других файлов, но пропустите все до строки <body> и начинайте с строки </body> .
  • Наконец, создадим последние закрывающие теги.

Решение, данное @angus, является хорошим, но будет иметь проблемы, если в папке есть папки, которые это исправит.

cat $(ls -tpa | grep -v / )