Tengo un montón de carpetas y quiero recorrer todas esas carpetas y en cada carpeta crear otra carpeta llamada "Foto"
F1
--F11
----F111
----F112
--F12
Quiero tener:
F1
--Photo
--F11
----Photo
----F111
------Photo
----F112
------Photo
--F12
----Photo
command-line
mkdir
OOzy Pal
fuente
fuente

lsno se analiza. Son solo comentarios para el usuario ... que muestran lo que está sucediendo. Al igual que las palabras "Este es un directorio de fotos". Le permite al usuario saber por qué no está creando un directorio allí.find -type d F1, ¿tal vez?$i/Photo, pero el OP no ha especificado qué debe hacerse en tal caso. También fallará en el caso, ciertamente improbable, donde uno de los$is contiene una nueva línea.Puede lograrlo con una sola
findllamada.La parte
-name 'Photo' -prune -ole indica que no vuelva a losPhotodirectorios existentes (y recién creados) : si el archivo (o directorio) encontrado tiene el nombrePhoto, deje de procesarlo (-prune). En el otro caso (-o), continúe con los directorios (-type d) y ejecute (-exec) el comando.fuente
-prune? :) Sí, es bastante contra-intuitivo pero vale la pena aprenderlo.-type djunto con-name 'Photo'antes-prune.findcontinuará con otras carpetas (incluidas las subcarpetas de esa carpeta, si así lo solicita).Puede pasar
findresultados enwhilelugar de,forya que de esta manera no se romperá si los nombres de archivo tienen espaciosPrimero cd al directorio
F1, luego haz:Si el directorio existe,
mkdirsimplemente se negará a crearlo, así que no hay problema ...Si los nombres de su directorio pueden contener nuevas líneas u otra extrañeza exótica, use esto que puede tratar con nombres arbitrarios:
Gracias a @terdon por la ayuda con esto :)
fuente
F1directorio de operaciones es~user/Pictures, moverse al directorio padre y ejecutar la línea colocará unPhotodirectorio en cada directorio en su espacio, que podría ser miles. Considere agregar elF1como parte de la línea de comando para evitar un error fácil de cometer. De esa manera, si se ejecuta inadvertidamente desde el lugar equivocado, no creará directorios.F1lugar, editado @LDJamesPython con
os.walkpuede hacerlo con bastante facilidad y en solo unas pocas líneas de códigoExplicación
Estamos tratando con este comando: python -c 'import os; [os.mkdir (r + "/ Pictures") para r, d, f en os.walk (".")]'
Aquí simplemente llamamos al intérprete de Python con
-cbandera para especificar el comando que damos entre comillas simples.os.walk()La función nos permite recorrer recursivamente todos los subdirectorios, y para cada subdirectorio (representado porr), creamos la carpeta Imágenes a través de laos.mkdir()función.r+"/Pictures"es solo una simple manipulación de cadenas para unir una cadena de subdirectorio y una cadena "/ Pictures" para formar una rutaReemplace "/ Imágenes" con "/ Foto" para satisfacer sus necesidades
fuente
Si está usando bash, simplemente puede ejecutar:
La
globstaropción hace**coincidir "todos los archivos y 0 o más directorios y subdirectorios". En otras palabras, coincide con todo de forma recursiva. Debido/al final,**/coincidirá con todos los directorios y subdirectorios (sin archivos). Por lo tanto,$diterará sobre todos los directorios en el directorio actual y sus subdirectorios y elPhotosdirectorio se creará en cada uno de ellos.La
-pbandera de losmkdirmedios:Aquí, solo lo estoy usando para suprimir mensajes de error si el directorio de destino ya existe. Elimínelo si desea ver los errores.
Tenga en cuenta que esto no podrá crear un
Photosubdirectorio en un directorio de destino que contenga un archivo llamado Foto. Sin embargo, no ha especificado qué se debe hacer en esos casos y todas las demás respuestas publicadas hasta ahora también tienen esta limitación.fuente