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.