2012-09-05 7 views
13

Solo tengo un nombre de archivo que es myfile.txt y no estoy seguro de dónde se guarda. ¿Cómo puedo obtener la ruta completa exacta donde se almacena el archivo? He tratadocómo obtener la ruta completa exacta a un archivo en Perl

$string=`ls /abc/def/*/*/*/*/myfile.txt`; 

Resultado: ruta completa es /abc/def/ghi/jkl/mno/pqr/myfile.txt

Me capaz de obtener la ruta completa mediante la ejecución de shell command utilizando script de perl anteriormente. Sin embargo, esto tomó mucho tiempo para devolver el camino. ¿Es esa la forma de encontrar la ruta completa del archivo usando perl?

+0

Defina "la ruta completa". Un archivo puede tener más de uno. ¿Puede incluir enlaces simbólicos? – reinierpost

Respuesta

16

Bueno, si myfile.txt es en realidad una ruta relativa a ese archivo, hay un sub módulo central para que - File::Spec->rel2abs():

use File::Spec; 
    ... 
    my $rel_path = 'myfile.txt'; 
    my $abs_path = File::Spec->rel2abs($rel_path) ; 

... y si realmente se necesita para buscar a través de sus directorios para ese archivo , hay File :: Find ... pero yo iría con el comando shell find/-name myfile.txt -print probablemente.

+0

Hola Rainna.I, lo siento, no es una ruta relativa.Traté el código anterior y el resultado será mi /myfile.txt – Steven

+0

@Steven Sí, ya que 'rel2abs' en realidad no intenta busca ese archivo. ¿Qué hay de usar el comando 'find' que he dado? O tal vez necesita una solución estrictamente Perlish?) Entonces File :: Find es el camino a seguir. – raina77ow

12

Debe utilizar el módulo Perl Cwd para lograr esto. El enlace tiene un ejemplo también visto a continuación.

#!/usr/bin/perl 
use Cwd; 
my $dir = getcwd; 
use Cwd 'abs_path'; 
my $abs_path = abs_path($file); 
+3

Esto produce una ruta absoluta, pero aún puede contener enlaces simbólicos; p.ej. no puede terminar con una ruta que apunte desde el punto de montaje raíz del sistema de archivos en el que se encuentra el archivo. – reinierpost

4

Podemos mirar desde cualquier lugar del sistema, pero en este caso estamos mirando desde la carpeta "/ abc/def".

$start_path = "/abc/def/"; 
@files = <$start_path*/myfile.txt> 

foreach $file(@files) { 
    print $file; # prints full path of file. 
} 

Sé que la publicación se realizó hace un año, pero algunos todavía pueden ver esta pregunta.

Cuestiones relacionadas