2010-08-11 7 views
12

En mi script de Perl, tengo el parámetro $FILE=/etc/sysconfig/network¿Cómo obtengo el nombre dir de un archivo con Perl?

de qué manera (en Perl) que puede cortar sólo el directorio y poner el directorio de $ DIR parámetro

con el fin de conseguir:

$DIR=/etc/sysconfig 

(like dirname /etc/sysconfig/network in shell script) 

Respuesta

25
use File::Basename; 

($name,$path,$suffix) = fileparse($fullname,@suffixlist); 

$name = fileparse($fullname,@suffixlist); 
$basename = basename($fullname,@suffixlist); 
$dirname = dirname($fullname); 

Más información sobre File::Basename en Perldoc.

3

Uso del módulo File::Basename núcleo:

use strict; 
use warnings; 
use File::Basename; 

my $FILE = '/etc/sysconfig/network'; 
my $DIR = dirname($FILE); 
print $DIR, "\n"; 

Esto muestra:

/etc/sysconfig

31

¡Cuidado! dirname() es deliberadamente tonto para emular el comando de shell dirname. No es tanto "dame el directorio parte de esta ruta de archivo" como "dame todo menos la última parte de esta ruta". ¿Por qué es eso importante?

my $dir = "/foo/bar/"; # obviously a directory 
print dirname($dir);  # prints /foo 

Esto está muy bien, con tal de que te das cuenta que dirname no devuelve el nombredir.

Si desea que lo anterior regrese /foo/bar/, es mejor que use File :: Spec.

use File::Spec; 
my($vol,$dir,$file) = File::Spec->splitpath($path); 
+0

dirname() es trampa, splitpath() es la mejor respuesta; vota esto como respuesta a la solución. – AjayKumarBasuthkar

Cuestiones relacionadas