¿Y con el archivo más antiguo abajo?
Además, si hago esto, ¿es posible eliminar los encabezados redundantes contenidos en cada archivo HTML? Me veo concatenando muchos archivos HTML y sería bueno reducir un poco el tamaño del archivo final.
Respuesta1
Para concatenar archivos utilizas
cat file1 file2 file3 ...
Para obtener una lista de nombres de archivos citados ordenados por tiempo, el más nuevo primero, utilice
ls -t
Poniendolo todo junto,
cat $(ls -t) > outputfile
Es posible que desee dar algunos argumentos a ls
(por ejemplo, *.html
).
Pero si tiene nombres de archivos con espacios, esto no funcionará. My file.html
Se supondrá que hay dos nombres de archivos: My
y file.html
. Puede ls
citar los nombres de los archivos y luego usar xargs
, que entiende las comillas, para pasarle los argumentos cat
.
ls -tQ | xargs cat
En cuanto a su segunda pregunta, filtrar partes de archivos no es difícil, pero depende de qué desea eliminar exactamente. ¿Qué son los “encabezados redundantes”?
Respuesta2
La forma más sencilla de enumerar archivos en un orden distinto al lexicográfico es con zshclasificatorios globales. Sin zsh, puedes usar ls
, peroanalizar la salida de ls
está plagado de peligros.
cat *(om)
Si desea eliminar algunas líneas, use sed, awk o perl. Por ejemplo, para tomar las partes <head>
del primer archivo y combinar las <body>
partes de los otros archivos, asumiendo que las etiquetas <body>
y </body>
están solas en una línea en cada archivo:
{
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
Explicación:
- Primero,
concatenated.html
se crea. Por lo tanto, es el*.html
archivo más reciente (suponiendo que ningún archivo tenga una fecha futura). - Luego copie desde el segundo
*.html
archivo más reciente, pero salga en la</body>
línea. - Luego copie de los otros archivos, pero omita todo hasta la
<body>
línea y comience con la</body>
línea. - Finalmente produzca las últimas etiquetas de cierre.
Respuesta3
La solución proporcionada por @angus es buena, pero tendrá problemas si hay directorios en la carpeta, esto lo solucionará.
cat $(ls -tpa | grep -v / )