¿Cómo crear el mismo archivo en todos los subdirectorios?

¿Cómo crear el mismo archivo en todos los subdirectorios?

Tengo muchos subdirectorios existentes, como:

/path/to/my/subs/a
/path/to/my/subs/b
/path/to/my/subs/c

No, quiero crear un nuevo archivo en cada uno de ellos. El nombre del archivo es constante, como:

/path/to/my/subs/a/foo.md
/path/to/my/subs/b/foo.md
/path/to/my/subs/c/foo.md

¿Cómo hago esto? Esperaba touch /path/to/my/subs/*/foo.mdque lo hiciera pero decíatouch: /path/to/my/subs/*/foo.md: No such file or directory

Respuesta1

Suponiendo que lo utilice bashcomo caparazón, utilice la expansión de llaves.

touch /path/to/my/subs/{a,b,c}/foo.md

Respuesta2

Puedes utilizar la findutilidad:

find /path/to/my/subs -type d -links 2 -exec touch "{}/foo.md" \;

Esto recorrerá todo el árbol comenzando en subs, ubicará los directorios de hoja (terminal) y tocará un archivo foo md allí.

También puedes omitir la parte "-exec"... y usarla xargspara crear todos los archivos juntos al final, generando menos toucharchivos binarios, o usar un solo toque:

touch $( find /path/to/my/subs -type d -links 2 | sed -e 's#$#/foo.md#g' )

La findparte obtendrá los directorios y sedlos convertirá en los nombres de archivo apropiados.

Si tiene una sola capa de directorios:

para directorio en /ruta/a/mis/subs/*; toque $dir/foo.md ; hecho

información relacionada