command line - una - Línea de comando para borrar archivos recursivamente pero excluyendo un cierto archivo
mover varios archivos en linux (6)
Puede recorrer fácilmente un conjunto de archivos y ejecutar un comando en cada uno, como este:
set match=D:/blah/M*.zip
for %%x in (%match%) do (
del %%x
)
Entonces creo que debes leer este artículo sobre cómo manipular cadenas en DOS: http://www.dostips.com/DtTipsStringManipulation.php
Necesito eliminar archivos de un tipo determinado (archivos .zip, por ejemplo) de una carpeta y todas sus subcarpetas, usando la línea de comando. Idealmente, estoy buscando algo que pueda ejecutarse como un archivo .bat en Windows.
Sé que hay un modificador / S para que el comando DEL se vea en las subcarpetas, pero para agregar al desafío necesito excluir archivos de un cierto nombre ("Backup.zip" como ejemplo).
¿Hay alguna manera de eliminar archivos recursivamente pero excluir archivos de un cierto nombre? No será práctico en mi situación enumerar explícitamente todos los nombres de archivo que deseo eliminar, solo los archivos del tipo coincidente que no deseo eliminar.
Tal vez el comando ''forfiles'' podría ser de utilidad
http://technet.microsoft.com/en-us/library/cc753551.aspx
Espero que ayude.
Esta secuencia de comandos eliminará todos los archivos .zip de una carpeta (y subcarpetas), PERO SOLO SI el nombre del archivo no contiene la palabra "copia de seguridad", o "Copia de seguridad" o "COPIA DE SEGURIDAD", etc.
# Script DeleteZip.txt
var str folder, filelist, file
cd $folder
lf -r -n "*.zip" > $filelist
while ($filelist <> "")
do
lex "1" $filelist > $file
# Does this $file contain the word "backup" ? Do case independent search (-c option).
if ( { sen -c "^backup^" $file } <= 0 )
system del ("/""+$file+"/"")
endif
done
El script está en biterscripting ( http://www.biterscripting.com ). Guarde el script en el archivo C: /Scripts/DeleteZip.txt. Ejecute el script como
script "C:/Scripts/DeleteZip.txt" folder("C:/testfolder")
Hará la operación de eliminación en la carpeta C: / carpeta de prueba y todas sus subcarpetas, en todos los niveles.
Solo haz esto, fácil
- botón de Windows + r
- escribe
cmd
y presiona enter - Navega al directorio principal:
escribac:
od:
(o la letra de la unidad a la que desea navegar) - escriba
dir
para ver una lista de los contenidos de ese directorio (dir /ah
para ver los archivos ocultos) - luego, para cambiar el directorio, escriba
cd xxxx
(xxxx = nombre del directorio) - Repita los pasos 4 y 5 hasta llegar al directorio donde desea ejecutar el lote borrar
- luego escribe tu patrón. Algo como:
del /S /ah *.jpg
y presiona enter. Se ejecutará en todos los subdirectorios y eliminará todos los archivos visibles y ocultos que sean archivos .jpg
* es un comodín
/ S elimina de todas las subcarpetas
/ ah a = seleccionar archivos según el atributo, h = oculto
Ejemplo: para eliminar los molestos archivos .DS_Store que aparecen al copiar desde Mac a Windows, ejecute:
del /S /ah .DS_Store
o
del /S /ah ._*
que obtendrá todos los archivos ocultos ''duplicados'' que también se crean al copiar de Mac a Windows.
Un buen truco: ¡haga que los archivos que desea excluir sean de solo lectura !
DEL /S
no eliminará el archivo de solo lectura.
La siguiente secuencia de comandos no hace exactamente lo que usted desea (consulte mis comentarios a continuación), pero le muestra cómo se pueden usar los archivos de solo lectura para evitar su eliminación.
@ECHO OFF
:: This example supposes your first parameter is
:: the relative path to the folder to be deleted
:: and the second is the relative path (from the
:: the target folder) of the one to be excluded
:: Notice that this will only work if the folders
:: are in the working drive, if not, you ll
:: have to specify full paths
IF "%1"=="" GOTO ERROR
IF "%2"=="" GOTO ERROR
IF NOT EXIST %1/NUL GOTO ERROR
CD %1
IF NOT EXIST %2/NUL GOTO ERROR
ECHO Starting up the deletion process
ECHO. * Setting attributes
attrib %1/*.mp3 -r -s -h > NUL
attrib %2/*.mp3 +r > NUL
ECHO. * Deleting files
del /s %1/*.mp3
ECHO. * Reseting attributes
attrib %2/*.mp3 -r > NUL
ECHO.
ECHO Operation completed!
ECHO.
GOTO END
:ERROR
ECHO Parameters:
ECHO. Param1 -> target folder
ECHO. Param2 -> folder to be ignored
ECHO.
GOTO END
:END
Nota: puede adaptar esta secuencia de comandos para ignorar no solo una subcarpeta, sino todos los archivos de un tipo dado:
attrib /S *.xxx +r > NUL
le ayudará a excluir todos los archivos ''xxx'' del directorio actual y todos los subdirectorios (de ahí la opción /S
).
Nota: la parte " > NUL
" es una redirección que a menudo se usa para ocultar la salida estándar, en lugar de mostrarla en la pantalla.
Puede ser peligroso si se usa con demasiada frecuencia (en un bucle grande con diferentes caminos involucrados, por ejemplo) ya que es un dispositivo , y como todos los dispositivos ( AUX
, COMn
, LPTn
, NUL
y PRN
):
- abrir un dispositivo reclamará un identificador de archivo. Sin embargo, a diferencia de los archivos, los dispositivos nunca se cerrarán hasta que se reinicie.
- cada dispositivo existe en cada directorio en cada unidad, por lo que si utilizó la redirección a
NUL
en, por ejemplo,C:/
y después de eso la usa nuevamente enC:/TEMP
, perderá otro identificador de archivo.
Simplemente puede usar a continuación:
forfiles /p C:/temp-new /s /c "cmd /c if @isdir==FALSE del @file"