[Reto Bash] It's a dir?

Iniciado por Runex, 12 Mayo 2012, 17:28 PM

0 Miembros y 1 Visitante están viendo este tema.

Runex

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:    

Solución: http://pastebin.com/Z6WTYpAS

Solucionado:

1-> Leo Gutiérrez
"No renunciaría al bambú.
Nunca renuciaría a ti.
No te compares con otros" "El me dijo:
El bambú tenía un propósito diferente al del
helecho, sin embargo eran necesarios y
hacían del bosque un lugar hermoso".

leogtz

[ -f "$in" ] && echo -e "Es un archivo regular."
[ -d "$in" ] && echo -e "Es un directorio."

Creo que con eso basta.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Runex

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 :)

"No renunciaría al bambú.
Nunca renuciaría a ti.
No te compares con otros" "El me dijo:
El bambú tenía un propósito diferente al del
helecho, sin embargo eran necesarios y
hacían del bosque un lugar hermoso".

Puntoinfinito

Yo lo haré en Python, ya que así práctico x)

Código (python) [Seleccionar]

#! /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");

AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

jdomgo3

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:

Código (bash) [Seleccionar]
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

Yoel Alejandro

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.
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

jdomgo3

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.

acarllc

Código (bash) [Seleccionar]
#!/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