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.md
que lo hiciera pero decíatouch: /path/to/my/subs/*/foo.md: No such file or directory
Respuesta1
Suponiendo que lo utilice bash
como caparazón, utilice la expansión de llaves.
touch /path/to/my/subs/{a,b,c}/foo.md
Respuesta2
Puedes utilizar la find
utilidad:
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 xargs
para crear todos los archivos juntos al final, generando menos touch
archivos binarios, o usar un solo toque:
touch $( find /path/to/my/subs -type d -links 2 | sed -e 's#$#/foo.md#g' )
La find
parte obtendrá los directorios y sed
los 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