Eu tenho várias pastas e quero passar por todas essas pastas e, em cada pasta, criar outra pasta chamada "Foto"
F1
--F11
----F111
----F112
--F12
Eu quero ter:
F1
--Photo
--F11
----Photo
----F111
------Photo
----F112
------Photo
--F12
----Photo
command-line
mkdir
OOzy Pal
fonte
fonte
ls
não é analisado. É apenas um feedback para o usuário ... mostrando o que está acontecendo. Assim como as palavras "Este é um diretório de fotos". Está deixando o usuário saber por que não está criando um diretório lá.find -type d F1
, talvez?$i/Photo
, mas o OP não especificou o que deve ser feito nesse caso. Também falhará no caso, reconhecidamente improvável, em que um dos$i
s contenha uma nova linha.Você pode conseguir isso usando uma única
find
chamada.A parte
-name 'Photo' -prune -o
diz para não recorrer aosPhoto
diretórios existentes (e recém-criados) : Se o arquivo (ou diretório) encontrado tiver o nomePhoto
, pare de processá-lo (-prune
). No outro caso (-o
), continue com os diretórios (-type d
) e execute (-exec
) o comando.fonte
-prune
? :) Sim, é bastante contra-intuitivo, mas vale a pena aprender.-type d
junto com-name 'Photo'
antes-prune
.find
continuará com outras pastas (incluindo subpastas dessa pasta, se você estiver solicitando isso).Você pode passar os
find
resultados para, ewhile
não,for
pois dessa forma não será interrompido se os nomes de arquivos tiverem espaçosPrimeiro cd para o diretório
F1
, então faça:Se o diretório existir,
mkdir
apenas se recusará a criá-lo, então não há problema ...Se os nomes dos diretórios puderem conter novas linhas ou outras estranhezas exóticas, use isso que pode lidar com nomes arbitrários:
Obrigado a @terdon pela ajuda com isso :)
fonte
F1
diretório do op estiver~user/Pictures
, mover para o diretório pai e executar a linha colocará umPhoto
diretório em todos os diretórios em seu espaço, que podem ser milhares. Considere adicionar oF1
como parte da linha comercial para evitar um erro facilmente cometido. Dessa forma, se for inadvertidamente executado no lugar errado, não criará diretórios.F1
@LDJames vez, editadoPython com
os.walk
pode fazê-lo facilmente e em apenas algumas linhas de códigoExplicação
Estamos lidando com este comando: python -c 'import os; [os.mkdir (r + "/ Pictures") para r, d, f em os.walk (".")]'
Aqui, chamamos simplesmente python intérprete com
-c
flag para especificar o comando que fornecemos entre aspas simples.os.walk()
A função nos permite percorrer recursivamente todos os subdiretórios e, para cada subdiretório (representado porr
), criamos a pasta Imagens viaos.mkdir()
função.r+"/Pictures"
é apenas uma manipulação simples de string para unir a string do subdiretório e a string "/ Pictures" para formar um caminhoSubstitua "/ Pictures" por "/ Photo" para atender às suas necessidades
fonte
Se você estiver usando o bash, basta executar:
A
globstar
opção faz a**
correspondência "todos os arquivos e 0 ou mais diretórios e subdiretórios". Em outras palavras, ele corresponde a tudo recursivamente. Por causa do/
no final,**/
corresponderá a todos os diretórios e subdiretórios (sem arquivos). Portanto, o$d
iterará sobre todos os diretórios no diretório atual e seus subdiretórios e oPhotos
diretório será criado em cada um deles.A
-p
bandeira dosmkdir
meios:Aqui, estou apenas usando-o para suprimir mensagens de erro se o diretório de destino já existir. Remova-o se desejar ver os erros.
Observe que isso falhará ao criar um
Photo
subdiretório em um diretório de destino que contenha um arquivo chamado Foto. Você não especificou o que deve ser feito nesses casos e todas as outras respostas postadas até agora também têm essa limitação.fonte