
Eu tenho muitos arquivos em locais como este:
C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1)/(filename1).ext
.../(filename2)/(filename2).ext
.../(filename3)/(filename3).ext
Estou tentando mover os .ext
arquivos em lote para a pasta pai, então é:
C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1).ext
Eliminando essencialmente a necessidade da subpasta, como tirar divisórias de um fichário escolar.
Responder1
Você pode ter que fazer isso comCygwin, que eu recomendo para quem (ainda??) executa o spyware M$ Windoze.
Algo assim deve funcionar. Execute-o no diretório C:/Users/(Username)/Desktop/(Parent-Collection name)/
(que no cygwin seria referido como /cygdrive/c/Users/(Username)/Desktop/(Parent-Collection name)/)
:
for i in `find . -name "*" -type f`;
do mv $i `echo $i | sed 's/.*\/\([^/]*\)/\1/'`;
done
Isso moverá todos os arquivos em todos os diretórios abaixo (Parent-Collection name)
para (Parent-Collection name)
. Especificamente, este é um do
loop com o índice i
percorrendo todos os arquivos do diretório atual para baixo. Isso é o que o find
comando 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 através do editor de fluxo ( sed
, com o qual você pode pesquisar man sed
) que está configurado para retirar 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 depois remover esses diretórios ( rmdir
, que só funciona em diretórios vazios).
Linux não é legal? O Cygwin oferece um pouco do poder do Linux e pode ser o primeiro passo para deixá-lo confortável o suficiente com ele, para que algum dia você possa até achar que pode mudar para algo como o Ubuntu. :)
Responder2
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 $sourcefolder
serão movidos para a ParrentCollectionName
pasta. Então você pode excluir as subpastas vazias.