
Tengo un montón de archivos en ubicaciones como esta:
C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1)/(filename1).ext
.../(filename2)/(filename2).ext
.../(filename3)/(filename3).ext
Estoy intentando mover los .ext
archivos por lotes a la carpeta principal, por lo que es:
C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1).ext
Básicamente, elimina la necesidad de la subcarpeta, de forma muy parecida a sacar los divisores de una carpeta escolar.
Respuesta1
Quizás tengas que hacer esto concygwin, que recomendaría a cualquiera que esté (¿todavía??) ejecutando el software espía M$ Windoze.
Algo como esto debería funcionar. Ejecútelo en el directorio C:/Users/(Username)/Desktop/(Parent-Collection name)/
(que en cygwin se denominaría /cygdrive/c/Users/(Username)/Desktop/(Parent-Collection name)/)
:
for i in `find . -name "*" -type f`;
do mv $i `echo $i | sed 's/.*\/\([^/]*\)/\1/'`;
done
Eso moverá todos los archivos en todos los directorios siguientes (Parent-Collection name)
a (Parent-Collection name)
. Específicamente, este es un do
bucle con el índice i
recorriendo cada archivo desde el directorio actual hacia abajo. Eso es lo que find
enumera el comando. Puedes buscar la sintaxis ejecutando man find
. Luego lo que ejecutas es mover ( mv
) ese archivo ( $i
) a la nueva ubicación. Esa nueva ubicación se especifica mediante el nombre de archivo original ( echo $i
) ejecutado a través del editor de secuencias ( sed
, con el que puede buscar man sed
), que está configurado para eliminar la ruta, dejando el nombre de archivo base.
Sugiero probarlo (crear un directorio con un par de subdirectorios que contengan algunos archivos de texto vacíos o algo así) y asegurarse de tener una copia de seguridad.
Es posible que desees eliminar todos los directorios (ahora vacíos) debajo de tu directorio actual:
for i in `find . -name "*" -type d`;
do rmdir $i;
done
La única diferencia aquí es que le indica find
que busque directorios ( -type d
) en lugar de archivos ( -type f
) y luego elimine esos directorios ( rmdir
, lo que solo funciona en directorios vacíos).
¿No es genial Linux? Cygwin te brinda algo del poder de Linux y podría ser un primer paso para que te sientas lo suficientemente cómodo con él como para que algún día incluso encuentres la capacidad de pasarte a algo como Ubuntu. :)
Respuesta2
Esto se puede hacer con Powershell, aunque no sabemos qué versión de Windows estás 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 los archivos en los subdirectorios de $sourcefolder
se moverán a la ParrentCollectionName
carpeta. Luego puede eliminar las subcarpetas vacías.