Es el mismo reto que el planteado por EleKtro pero en bash, así que dificultad ninguna :).
Nombre: It's a dir?
Dificultad: 2/10
Objetivo: Diferenciar entre directorios y archivos
Indicaciones:
Ejemplo:
(http://i47.tinypic.com/1zv4f40.png)(http://i46.tinypic.com/sbhs9t.png)
Solución: http://pastebin.com/Z6WTYpAS
Solucionado:
1-> Leo Gutiérrez
[ -f "$in" ] && echo -e "Es un archivo regular."
[ -d "$in" ] && echo -e "Es un directorio."
Creo que con eso basta.
Cita de: Leo Gutiérrez. en 18 Mayo 2012, 15:53 PM
[ -f "$in" ] && echo -e "Es un archivo regular."
[ -d "$in" ] && echo -e "Es un directorio."
Creo que con eso basta.
Se, esa era la solución, hubiese estado mejor el source entero pero eso era lo único trascendente :)
Yo lo haré en Python, ya que así práctico x)
#! /usr/local/bin/Python-3.3.0/python
import os.path
filee = str(input("Put an string >> "));
if os.path.isdir(filee):
print("Es un directorio");
elif os.path.isfile(filee):
print("Es un archivo");
else:
print("No existe");
Se que llego con casi un año de retraso, pero en shell script hay varias maneras de comprobar si existe un fichero, directorio, link o indiferente. Aquí va mi aportación de lo mas simple:
D=/tmp
A=/$D/archivo.txt
L=/$D/link
# Para comprobar si es un directorio
if [ -d $D ];then echo "$D es un directorio.";fi
# Para comprobar si es un fichero
if [ -f $A ];then echo "$A es un fichero.";fi
# Para comprobar si es un link simbólico
if [ -L $L ];then echo "$L es un link simbólico.";fi
# Para comprobar simplemente si existe, sea lo que sea, fichero, directorio o link
if [ -e $A ];then echo "$A existe.";fi
Pero cuidado, el hecho de que no sea tipo f, no significa que sea un directorio. En UNIX existen tipos de fichero que no son ni directorio ni archivo normal, como links simbólicos, o dispositivos especiales de bloque.
En realidad hay 7 tipos definidos en los sistemas BDS y System V que son:
- (-) Archivo ordinario y tiene la constante asociada en sys/stat.h "S__IFREG"
- (d) Directorio y tiene la constante asociada en sys/stat.h "S__IFDIR"
- (p) Cauce nombrado o "fifo" y tiene la constante asociada en sys/stat.h "S__IFIFO"
- (c) Archivo especial modo carácter y tiene la constante asociada en sys/stat.h "S__IFCHR"
- (b) Archivo especial modo bloque y tiene la constante asociada en sys/stat.h "S__IFBLK"
- (l) Enlace simbólico y tiene la constante asociada en sys/stat.h "S__IFLNK"
- (s) "Shoket" y tiene la constante asociada en sys/stat.h "S__IFSHOCK"
Un saludo.
#!/bin/bash
if [ $# -gt 0 ]; then
if [ -e $1 ]; then
if [ -f $1 ]; then
echo "Es un archivo"
elif [ -d $1 ]; then
echo "Es un directorio"
fi
else
echo "No existe directorio ni archivo con ese nombre"
fi
fi