Si extrajo los archivos de manera que la marca de tiempo de modificación en el archivo no se conserva en las copias extraídas (sino que los archivos extraídos tienen su hora de modificación habitual), entonces la forma correcta de atacar esto es a través del tiempo de modificación. Todos los archivos extraídos tienen una marca de tiempo de modificación más reciente que el archivo existente modificado más recientemente en ese directorio.
Aquí hay una situación simple.
Suponga que ninguno de los archivos existentes en el directorio actual se tocó durante al menos 24 horas. Cualquier cosa que se haya modificado en las últimas 24 horas es, por lo tanto, basura del archivo zip.
$ find . -mtime -1 -print0 | xargs -0 rm
Esto también encontrará algunos directorios, pero rm
los dejará solos. Se pueden tratar en un segundo pase:
$ find . -mtime 1 -type d -print 0 | xargs -0 rmdir
Cualquier directorio que haya sido modificado recientemente fue modificado por el zip. Si rmdir
los elimina con éxito, eso significa que están vacíos. Los directorios vacíos que fueron tocados por zip probablemente fueron creados por él: es decir, vinieron del archivo. No podemos estar 100% seguros. Es posible que el trabajo de descompresión coloque algunos archivos en un directorio existente que estaba vacío.
Si find
la granularidad de 24 horas no es lo suficientemente buena para el trabajo, debido a que los archivos en el árbol se modificaron demasiado recientemente, entonces consideraría algo simple: supongamos que el trabajo de descompresión no incluye nada en los subdirectorios existentes. Es decir, todo lo que se descomprimió es un archivo en el nivel superior o un nuevo subdirectorio que no estaba allí antes, que por lo tanto no contiene más que material del zip. Entonces:
# list directory in descending order of modification time
$ ls -1t > filelist # descending order of modification time
Ahora abrimos filelist
en un editor de texto y determinamos la primera entrada en la lista que no vino del archivo zip. Eliminamos esa entrada y todo lo demás después de ella. Lo que queda son los archivos y directorios que vinieron del zip. Primero, inspeccionamos visualmente problemas como espacios en los nombres y ocurrencias de comillas que deben escaparse. Luego podemos agregar citas alrededor de todo, si es necesario: lo siguiente supone que usa Vim:
:%s/.*/"&"/
Luego únelo todo en una gran línea:
:%j
Ahora inserte rm -rf
delante de él:
Irm - rf<ESC>
Ejecute la línea debajo del cursor como un comando de shell:
!!sh<Enter>
Definitivamente, no automatizaría los pasos de esta tarea, debido al riesgo de borrar archivos que ya estaban allí, o arruinarlos debido a problemas de nombre de archivo.
Si va a seguir la ruta obvia de obtener una lista de las rutas en el archivo zip, luego captúrela en un archivo, revísela con mucho cuidado y transfórmela después de realizar cualquier edición necesaria.
lq
opciones paraunzizp
, solo agregué algunos trucos clásicos * nix alrededor de su respuesta principal.