Archivos fantasma, no sé cómo llamarlos.
Tengo un disco externo que el sistema se niega a hacer escribible. La mayoría de los archivos que contiene ya están en mi disco interno. Para ahorrar tiempo y espacio, hice una lista de los archivos que no están y escribí un script para crear los directorios y copiar los archivos. Incluí algunas impresiones de depuración en el script.
mkdir -p "~/tempdir/PATH"
no da ningún mensaje de error.
echo "~/tempdir/PATH"
muestra que la ruta es correcta
cp "DISK/PATH/FILE" "~/tempdir/PATH/FILE"
dice que "DISK/PATH/FILE" no existe, todavía
wc "~/tempdir/PATH/FILE"
muestra un tamaño razonable para el tipo de archivo. Pero inmediatamente después,
ls -la "~/tempdir/PATH/FILE"
dice que no hay tal archivo o directorio y Finder está de acuerdo en que el nivel superior de PATH no está en tempdir
Esta incoherencia se repite para cada archivo de la lista. chmod -RN
, xattr -rc
y similares para asegurarse de que no era un problema de permisos (aunque no había mensajes de error de permisos).
No sabía cómo desactivar "oh-my-zsh" así que fui a bash y el script hizo lo que se esperaba. Así que mi suposición es que "oh-my-zsh" ha puesto un alias a uno o más de los comandos para que se comporten de forma muy extraña.
¿CÓMO es posible en zsh+"oh-my-zsh" para cp
para decir que la fuente no existe, sin embargo wc
es capaz de leer el destino en un archivo que Finder dice que no existe? Y luego para ls
¿acordar que el destino no existe?
MacOS 12.5 / zsh con "oh-my-zsh"
En cuanto a lo siguiente, la partición de 5TB (disk8) aparece más tarde en la lista con su nombre. fsck y la Utilidad de Discos y Time Machine no tienen ningún problema con ella. Cualquier intento de eliminar archivos no necesarios en 3TB obtiene "sistema de archivos de sólo lectura". sudo mount -w
falla tanto si el volumen está montado como si no. fsck y la Utilidad de Discos muestran errores que no están corregidos.
ACTUALIZACIÓN: en bash, los errores que obtiene zsh+"oh-my-zsh" en todos los archivos no suceden en la mayoría de los archivos, ¡pero sí en el cinco o diez por ciento! (mismo script)
ACTUALIZACIÓN DOS: Aunque los mensajes de error no están ahí para más (no todos) de los archivos y rutas en bash, find
dice que ninguno de los archivos está allí, ¡y sólo uno de los directorios del nivel inferior!
ACTUALIZACIÓN 3: Descubrí que el shell creó un directorio llamado "~" en lugar de expandirlo. Sabía que $
las variables se expandían dentro de las comillas dobles, pero no sabía que ~
no lo es. (Creo que esa incoherencia fue una mala elección de diseño, pero ahora estamos atascados con ella). Vine aquí a mencionarlo como solución y veo que ya está en un comentario. De todos modos, ahí es donde fueron a parar mis "archivos fantasma".