Eliminar un archivo corrupto en Linux

Eliminar un archivo corrupto en Linux

¿Cómo puedo eliminar este archivo? Creo que es un archivo corrupto en un sistema de archivos VFAT.

?????????  ? ?       ?        ?            ? 100.jpg

Respuesta1

Una posibilidad es averiguar el inodenúmero del archivo, lo cual puedes hacer ejecutando ls -i. Esto devolverá dos columnas: la primera es el inodo y la segunda es el nombre del archivo. Luego puede usar el findcomando para seleccionar solo el archivo con ese inodo específico y eliminarlo.

sh-4.1$ ls -i .
  17921 somefile.ods
    169 someotherfile.conf
    305 -????????? ? ? ? ? ? 100.jpg
  18048 yetanotherfile.jpg

sh-4.1$ find . -maxdepth 1 -inum 305 -ok rm '{}' \;
< rm ... -????????? ? ? ? ? ? 100.jpg > ? y

Dado que lo más probable es que el inodo sea exclusivo del archivo (suponiendo que no haya enlaces físicos), esto le permitirá eliminarlo sin los riesgos inherentes a los comodines. Las opciones maxdepthy okdel comando de búsqueda hacen que sea aún menos probable que encuentres el archivo equivocado por accidente.

Respuesta2

No estoy seguro de si alguna de las respuestas aquí realmente tuvo el problema que informó Stig. Me encontré con este problema en mi sistema de archivos ext4:

# ls -l /tmp/dependencies/
ls: cannot access /tmp/dependencies/easy-rsa-master: No such file or directory
total 0
?????????? ? ? ? ?            ? easy-rsa-master

# ls -i /tmp/dependencies/
ls: cannot access /tmp/dependencies/easy-rsa-master: No such file or directory
? easy-rsa-master

# rm -r /tmp/dependencies
rm: descend into directory ‘dependencies’? y
rm: cannot remove ‘/tmp/dependencies/easy-rsa-master’: No such file or directory
rm: remove directory ‘dependencies’? y
rm: cannot remove ‘dependencies’: Directory not empty

El archivo en sí estaba dañado junto con sus atributos. ls -i muestra claramente que no hay ID de inodo. Ningún uso de rm funcionará. Incluso rm -rf ingresa al directorio e intenta eliminar el archivo directamente (y silenciosamente).

Mi solución fue recrear el directorio sin el archivo ofensivo. Luego puede mover el directorio a otra ubicación, como /tmp. Desaparecerá después de reiniciar o cada vez que su distribución limpie el directorio /tmp (con suerte).

Respuesta3

Recomendaría una versión un poco más defensiva de la sugerencia de Chao:

rm -i ./*100.jpg*

Las -imarcas rmle preguntarán si desea eliminar o no cada archivo que coincida con el comodín; esto garantiza que no eliminará accidentalmente otros archivos también. Y el líder ./garantiza que todos los nombres de archivos serán tratados comonombres de archivosy no más opciones rm(parece que podría tener un guión inicial allí, por eso es importante).

Es posible, por cierto, que haya personajes invisibles.adentrola cadena "100.jpg". Si lo anterior le muestra un mensaje de error como " rm: ./*100.jpg*: not found", ese es el motivo. ls -1fw | cat -vpuede ser útil.

Respuesta4

Podrías intentarlo

rm *100.jpg*

Los? Son signos de interrogación literales o caracteres que no tienen sentido. De cualquier manera, el sistema operativo en sí (y el shell) generalmente pueden eliminar el archivo, si el sistema de archivos no está bloqueado.

Si el sistema de archivosesSi está en mal estado, eliminar cosas puede empeorarlo. Le recomiendo que inicie Windows para escanear la unidad y eliminar el archivo allí si puede.

información relacionada