Domanda

In Perl, come posso creare una sottodirectory e, allo stesso tempo, creare directory principali se non esistono? Come il comando mkdir -p di UNIX?

È stato utile?

Soluzione

use File::Path qw(make_path);
make_path("path/to/sub/directory");

Il mkpath deprecato e il make_path preferito derivano da una discussione nel thread di Perl 5 Porters che è archiviato qui .

In poche parole, i test di Perl 5.10 hanno mostrato imbarazzo nell'analisi dell'argomento dell'interfaccia makepath (). Quindi è stato sostituito con una versione più semplice che ha utilizzato un hash come argomento finale per impostare le opzioni per la funzione.

Altri suggerimenti

Usa mkpath dal modulo File :: Path:

use File::Path qw(mkpath);
mkpath("path/to/sub/directory");

Si prega di ignorare se si sta cercando un modulo Perl con funzionalità 'mkdir -p' ma il seguente codice funzionerebbe:

my $dir = '/root/example/dir';

system ("mkdir -p $dir 2> /dev/null") == 0 
    or die "failed to create $dir. exiting...\n";

È possibile utilizzare un modulo ma è necessario installarlo su ciascun server su cui si esegue il porting del codice. Di solito preferisco usare la funzione di sistema per un lavoro come mkdir perché è un overhead minore importare e chiamare un modulo quando ne ho bisogno solo una volta per creare una directory.

ref http://perldoc.perl.org/File/Path.html

" La funzione make_path crea le directory date se non esistono [sic!] prima, proprio come il comando Unix mkdir -p "

mkdir () ti consente di creare directory nel tuo script Perl.

Esempio:

use strict;
use warnings;

my $directory = "tmp";

unless(mkdir($directory, 0755)) {
        die "Unable to create $directory\n";

Questo programma crea una directory chiamata " tmp " con autorizzazioni impostate su 0755 (solo il proprietario ha l'autorizzazione per scrivere nella directory; i membri del gruppo e altri possono solo visualizzare i file ed elencare il contenuto della directory).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top