Digamos que copio y pego archivos de la carpeta A, que incluye:
Carpeta A:
file1.cfg
file2.txt
file3.esp
file4.bsa
en la carpeta B, que después de actualizar tiene:
Carpeta B:
apples.mp3
file1.cfg *
file2.txt *
file3.esp *
file4.bsa *
turtles.jpg
¿Hay alguna forma de eliminar todos los archivos de la carpeta A que están en la carpeta B (marcados con un *)? Además de seleccionar manualmente cada uno y eliminarlo, o ctrl-Z'ing justo después de copiar y pegar
Preferiría un método de Windows o algún software que pudiera hacer esto
¡Gracias!
windows
windows-explorer
DarkFire13
fuente
fuente
Respuestas:
Hay un software gratuito llamado WinMerge . Puede usar este software para hacer coincidir duplicados. Primero, use
File
→Open
, y elija ambos directorios, con la carpeta con los archivos que desea mantener a la izquierda y los que no tiene a la derecha. A continuación, ir aView
, y anule la selecciónShow Different Items
,Show Left Unique Items
yShow Right Unique Items
. Esto dejará solo los archivos idénticos que quedan en la lista. Después de eso, elijaEdit
→Select All
, haga clic derecho en cualquier archivo y haga clic enDelete
→Right
. Esto eliminará los duplicados de la carpeta de la derecha.fuente
Esto se puede hacer a través de la línea de comando usando el comando
forfiles
Supongamos que tiene la carpeta A ubicada
c:\temp\Folder A
y la carpeta B ubicada enc:\temp\Folder B
El comando sería entonces:
Una vez hecho esto, la carpeta B tendrá todos los archivos eliminados que están presentes en la carpeta A. Tenga en cuenta que si la carpeta B tiene archivos con el mismo nombre, pero no el mismo contenido, se eliminarán.
Es posible extender esto para trabajar también con carpetas en subcarpetas, pero por temor a que esto se vuelva innecesariamente complicado, he decidido no publicarlo. Requeriría las opciones / sy @relpath (y pruebas adicionales xD)
fuente
Puede usar este script de PowerShell:
Esperemos que sea bastante claro. Analiza cada elemento de la carpeta B, comprueba si hay un elemento con el mismo nombre en la carpeta A y, de ser así, elimina el elemento de la carpeta A. Tenga en cuenta que la ruta final
\
en la carpeta es importante.Versión de una línea:
Si no le importa si obtiene un diluvio de errores rojos en la consola, puede eliminar el
-EA 'SilentlyContinue'
.Guárdelo como un
.ps1
archivo, por ejemplodedupe.ps1
. Antes de poder ejecutar scripts de PowerShell, deberá habilitar su ejecución:Entonces podrás invocarlo
.\dedupe.ps1
cuando estés en la carpeta que lo contiene.fuente
rsync
rsync
es un programa usado para sincronizar el directorio. De las muchas (realmente muchas) opciones que tiene, se explican por sí mismas--ignore-non-existing
,--remove-source-files
y--recursive
.Tu puedes hacer
si suponemos que tiene los archivos en el directorio A (4) y B (4 + 2).
fuente
La respuesta de LPChip es la mejor.
Pero debido a que comencé a aprender Python, pensé: "Diablos, ¿por qué no escribir un script de Python como respuesta a esta pregunta?"
Instalar Python y Send2Trash
Debería instalar Python antes de poder ejecutar el script desde la línea de comandos.
Luego instale Send2Trash para que los archivos eliminados no desaparezcan irremediablemente, sino que terminen en la papelera del sistema operativo:
Crear guión
Cree un nuevo archivo con, por ejemplo, el nombre
DeleteDuplicateInFolderA.py
Copie el siguiente script en el archivo.
Uso
Modo de ejecución en seco, que muestra qué archivos se eliminarían sin eliminar realmente ningún archivo:
Modo de eliminación de archivos, que de hecho elimina archivos, así que tenga cuidado:
Salida del modo de funcionamiento en seco
Salida del modo de eliminación de archivos
Prueba de unidad
Si desea probar la aplicación anterior, cree un archivo llamado
DeleteDuplicateInFolderATest.py
y pegue estas pruebas unitarias en ella:fuente
Usando bash
Seguro que podría estar más seguro verificando si el archivo está allí o verificando si el nombre de archivo es seguro. Pero suponiendo que solo quiera hacer esto, y no tenga ningún archivo ridículamente nombrado
folderB
, esta es una forma rápida y sucia de hacerlo. (y puede usar el emulador de bash que viene con git , si no está ejecutando Win10 + bash)fuente
Cualquier programa de estilo NC, como Total Commander, tiene un comando de diferencia de directorio que selecciona archivos en ambas pestañas que son diferentes de la otra pestaña. Llame a este comando,
tab
al directorio más grande (B), invierta la selección usando*
y elimine. Esto tiene la ventaja de no eliminar archivos que pueden haber cambiado (de alguna manera) y no son los mismos aunque estén de acuerdo en su nombre. Puede usar el mismo comando de directorio diff para localizarlos después de la eliminación.Supongo que estoy atrapado en los noventa ... pero realmente no he visto nada más elegante desde :-) Hasta ahora, esta es la única respuesta que requiere tan solo unas 5 pulsaciones de teclas y ninguna secuencia de comandos / línea de comandos.
fuente
Método de Windows
Si siempre necesita copiar archivos de una ubicación a otra y luego asegurarse de que los archivos que se copiaron correctamente también se eliminen de la ubicación de origen original, a continuación encontrará una solución de secuencia de comandos por lotes que puede usar para automatizar toda esa tarea con solo un Simplemente haga clic en cada ejecución.
Asegúrese de ajustar los
SourceDir
y lasDestDir
variables necesarias para sus necesidades.Además, en la parte de la secuencia de comandos a continuación,
("%SourceDir%\*.*") DO
simplemente puede cambiar el*.*
valor para que sea más explícito para los nombres de archivo (File A.txt
) o las extensiones de archivo (*.wav
) según sea necesario.Recursos adicionales
fuente