symbolic remove mac link directories bash symlink

bash - remove - symlink windows



Cómo verificar si existe un enlace simbólico (7)

¿Es el archivo realmente un enlace simbólico? Si no, la prueba habitual para la existencia es -r o -e .

Ver man test

Estoy tratando de verificar si existe un enlace simbólico en bash. Esto es lo que he intentado.

mda=/usr/mda if [ ! -L $mda ]; then echo "=> File doesn''t exist" fi mda=''/usr/mda'' if [ ! -L $mda ]; then echo "=> File doesn''t exist" fi

Sin embargo, eso no funciona. Si ''!'' queda fuera, nunca se dispara. Y si ''!'' está ahí, se dispara todo el tiempo.


¿Qué hay de usar readlink ?

# if symlink, readlink returns not empty string (the symlink target) # if string is not empty, test exits w/ 0 (normal) # # if non symlink, readlink returns empty string # if string is empty, test exits w/ 1 (error) simlink? () { test "$(readlink "${1}")"; } FILE=/usr/mda if simlink? "${FILE}"; then echo $FILE is a symlink else echo $FILE is not a symlink fi


-L es la prueba para archivo existe y también es un enlace simbólico

Si no desea probar que el archivo sea un enlace simbólico, simplemente realice una prueba para ver si existe independientemente del tipo (archivo, directorio, socket, etc.) y luego utilice -e

Entonces, si el archivo es realmente un archivo y no solo un enlace simbólico, puede hacer todas estas pruebas y obtener un estado de salida cuyo valor indique la condición de error.

if [ ! /( -e "${file}" /) ] then echo "%ERROR: file ${file} does not exist!" >&2 exit 1 elif [ ! /( -f "${file}" /) ] then echo "%ERROR: ${file} is not a file!" >&2 exit 2 elif [ ! /( -r "${file}" /) ] then echo "%ERROR: file ${file} is not readable!" >&2 exit 3 elif [ ! /( -s "${file}" /) ] then echo "%ERROR: file ${file} is empty!" >&2 exit 4 fi


Puede verificar la existencia de un enlace simbólico y que no está roto con:

[ -L ${my_link} ] && [ -e ${my_link} ]

Entonces, la solución completa es:

if [ -L ${my_link} ] ; then if [ -e ${my_link} ] ; then echo "Good link" else echo "Broken link" fi elif [ -e ${my_link} ] ; then echo "Not a link" else echo "Missing" fi


Si está probando la existencia de archivos, quiere -e no -L. -L prueba un enlace simbólico.


Tal vez esto es lo que estás buscando. Para verificar si existe un archivo y no es un enlace.

Pruebe este comando:

file="/usr/mda" [ -f $file ] && [ ! -L $file ] && echo "$file exists and is not a symlink"


-L devuelve verdadero si el "archivo" existe y es un enlace simbólico (el archivo vinculado puede existir o no). Desea -f (devuelve verdadero si el archivo existe y es un archivo normal) o tal vez simplemente -e (devuelve verdadero si el archivo existe independientemente del tipo).

De acuerdo con la página de manual de GNU , -h es idéntico a -L , pero de acuerdo con la página de manual de BSD , no debe usarse:

-h file verdadero si el archivo existe y es un enlace simbólico. Este operador se conserva para compatibilidad con versiones anteriores de este programa. No confíes en su existencia; use -L en su lugar.