А з найстарішим файлом знизу?
Крім того, якщо я це роблю, чи можна також викреслити зайві заголовки, що містяться в кожному файлі 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)також вразлива для розширення імені файлів. Якщо є ім'я файлу з виразом *або ?, або дужкою (наприклад file-[old].html); і якщо ім'я файлу, інтерпретоване як шаблон, відповідає іншим іменам; підхід створить неправильний список. set -fбуло б усунути цей недолік.
ls -Qможе давати вихід, який не підходить для xargs. Наприклад, "foo"стає "\"foo\"", але xargs не розуміє уникнути подвійних лапок в межах подвійних цитуваних рядків.
Найпростіший спосіб перерахування файлів у порядку, відмінному від лексикографічного, - це класифікатори zsh . Без 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 / )
cat $(ls -t) > outputfile, інакшеcatвідкидає назви файлів, які цитуються