Concatenar contenidos de files Y nombres

He estado escribiendo durante muchos meses. Los files que creo son files datedos con el nombre de 2011-06-13.markdown con contenido diario. Decidí que quería escribir todo en un solo file, pero me gustaría que las inputs estén en order cronológico inverso con un encabezado de date (del nombre del file). Lo que significa que me gustaría un directory de files separados como estos tres:

2014-09-21.markdown

¡Mira todas estas palabras que he escrito!

2014-09-22.markdown

¡Es un hábito serio de escritura que tengo!

2014-09-23.markdown

Pregunta formulada sobre stackexchange. ¡Maldita sea que es una comunidad útil!

para terminar luciendo como un file como este:

writing.markdown

2014-09-23

Pregunta formulada sobre stackexchange. ¡Maldita sea que es una comunidad útil!

2014-09-22

¡Es un hábito serio de escritura que tengo!

2014-09-21

¡Mira todas estas palabras que he escrito!

Todos los files están en un directory y tienen un nombre correcto. Sospecho que una combinación de find y cat puede ayudarme, pero no estoy seguro de cómo proceder.

Aquí hay una manera de hacer lo que quiera con un solo file (que llamaremos $file por ahora) e imprimirlo en la salida estándar

 # prepend a "# " and remove the .markdown from the filename sed 's/\.markdown//' <<< "# $file" # print a blank line echo # output the file cat "$file" 

Ahora, para lo que realmente quería, enciérrelo en un bucle for para iterar sobre cada rebaja en el directory. Luego, envíe el resultado a un file.

 for file in *.markdown; do # prepend a "# " and remove the .markdown from the filename sed 's/\.markdown//' <<< "# $file" # print a blank line echo # output the file cat "$file" # separate the files with another blank line echo done > writing.markdown 

EDITAR: Espera, ¡eso no es lo que querías! Para revertir el order, podemos usar la order de búsqueda para encontrar todos los files de rebajas, luego canalizar la salida en sort -r para get el order de orderamiento inverso que usted desea. Finalmente, canaliza eso en read y bucle. Además, necesitaremos invocar el basename al extraer la date del nombre del file, ya que el resultado devuelve una ruta en lugar de un nombre de file.

 find -name '*.markdown' -not -name 'writing.markdown' | sort -r | while read file; do # prepend a "# " and remove the .markdown from the filename sed 's/\.markdown//' <<< "# $(basename $file)" # print a blank line echo # output the file cat "$file" # separate the files with another blank line echo done > writing.markdown 

Como son muy difíciles de search en Google, incluyo un enlace a cierta documentation sobre Here Strings en caso de que no estés familiarizado con ellos.

Puedes intentar algo como esto. He escrito en tres files de text sample1 , sample2 y sample3 con los contenidos exactos que me ha proporcionado. Cuando escribo este command:

cat sample1 sample2 sample3 >> sample4

Obtengo esto por resultados cuando tomo cat sample4 :

 2014-09-23 Asked question on stackexchange. Damn that is a helpful community! 2014-09-22.markdown That's one serious writing habit I have! 2014-09-21.markdown Look at all these words I've written! 

El >> agrega a sample4 , mientras que un single > sobrescribirá sample4 cada vez que se usa. Entonces en tu caso, puedes usar este command:

cat 2014-09-23.markdown 2014-09-22.markdown 2014-09-21.markdown >> writing.markdown

Espero que esto ayude.