А з найстарішим файлом знизу?
Крім того, якщо я це роблю, чи можна також викреслити зайві заголовки, що містяться в кожному файлі 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
відкидає назви файлів, які цитуються