Posso mover muitos arquivos em vários subdiretórios / pastas separados para um único principal no Windows?

0

Eu tenho uma tonelada de arquivos em locais como este:

C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1)/(filename1).ext

.../(filename2)/(filename2).ext

.../(filename3)/(filename3).ext

Estou tentando mover em lote os arquivos .ext para a pasta pai, por isso:

C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1).ext

Eliminando essencialmente a necessidade da subpasta, bem como tirando divisores de uma pasta da escola.

    
por zackoftrades333 11.06.2016 / 02:37

2 respostas

1

Você pode ter que fazer este com o cygwin , que eu recomendo para quem está (ainda?) executando o M $ Windoze spyware.

Algo como isso deve funcionar. Execute-o no diretório C:/Users/(Username)/Desktop/(Parent-Collection name)/ (que no cygwin seria chamado de /cygdrive/c/Users/(Username)/Desktop/(Parent-Collection name)/) :

for i in 'find . -name "*" -type f'; 
    do mv $i 'echo $i | sed 's/.*\/\([^/]*\)//''; 
done

Isso moverá todos os arquivos em todos os diretórios abaixo de (Parent-Collection name) para (Parent-Collection name) . Especificamente, este é um loop do com o índice i fazendo o loop em todos os arquivos do diretório atual. Isso é o que o comando find lista. Você pode procurar a sintaxe executando man find . Então o que você executa é mover ( mv ) esse arquivo ( $i ) para o novo local. Esse novo local é especificado pelo nome do arquivo original ( echo $i ) executado pelo editor de fluxo ( sed , que você pode procurar com man sed ), que está definido para remover o caminho, deixando o nome do arquivo base.

Sugiro testá-lo (crie um diretório com alguns subdiretórios contendo alguns arquivos de texto vazios ou algo assim) e certifique-se de ter um backup!

Você pode então querer remover todos os diretórios (agora vazios) abaixo do seu diretório atual:

for i in 'find . -name "*" -type d'; 
    do rmdir $i; 
done

A única coisa diferente aqui é que você está dizendo find para procurar diretórios ( -type d ) em vez de arquivos ( -type f ) e então remover esses diretórios ( rmdir , que funciona apenas em diretórios vazios) .

O linux não é legal? O Cygwin dá a você um pouco do poder do Linux e pode ser o primeiro passo para deixá-lo confortável o suficiente para que algum dia você possa até encontrá-lo em você para mudar para algo como o Ubuntu. :)

    
por 11.06.2016 / 03:42
1

Isso pode ser feito com o Powershell, embora não saibamos qual versão do Windows você está usando.

$sourcefolder = "C:\Users\username\Desktop\ParentCollectionName"

$allfiles = Get-ChildItem -Recurse $sourcefolder | Where-Object {$_.PSIScontainer -eq $false}
ForEach ($file in $allfiles)
    {
        $destinationfolder = Split-Path -Parent $file.Directory.FullName
        Move-Item $file.FullName $destinationfolder
    }

Todos os arquivos nos subdiretórios de $sourcefolder serão movidos para a pasta ParrentCollectionName . Em seguida, você pode excluir as subpastas vazias.

Fonte

    
por 14.06.2016 / 14:22