Créer un répertoire en Perl pour un fichier si il n'existe pas
J'ai un script Perl qui prend quelques arguments. Il est exécuté comme ceci:
exec myscript.pl --file=/path/to/input/file --logfile=/path/to/logfile/logfile.log
J'ai la ligne suivante dans le script:
open LOGFILE, ">>$logFilePath" or die "Can't open '$logFilePath': $!\n";
Où $logfilePath
est prise à partir de la ligne de commande.
Si il y a un chemin, le chemin /chemin/vers/le /fichier de log/, mais pas de fichier de log.journal, il crée simplement (ce qui est l'action de votre choix). Cependant, il ne parvient pas à démarrer s'il n'existe pas de chemin d'accès. Comment puis-je faire le script de créer le chemin pour le fichier de log, si elle n'existe pas avant l'exécution du script?
Un simple
Le problème est que j'ai hérité le fichier de quelqu'un d'autre. Je n'ai absolument aucune expérience avec perl que ce soit. Je l'apprécie hautement le code complet pour que.
utilisateur: l'appel d'une commande unix, Perl est fait avec le
Pourquoi faire appel à une commande unix lorsque Perl dispose de sa propre fonction mkdir qui fait exactement la même chose?
mkdir -p
auto-création des parents.Le problème est que j'ai hérité le fichier de quelqu'un d'autre. Je n'ai absolument aucune expérience avec perl que ce soit. Je l'apprécie hautement le code complet pour que.
utilisateur: l'appel d'une commande unix, Perl est fait avec le
system
la commande. Combinez cela avec la mkdir je vous ai donné ci-dessus.Pourquoi faire appel à une commande unix lorsque Perl dispose de sa propre fonction mkdir qui fait exactement la même chose?
OriginalL'auteur user1546927 | 2012-08-21
Vous devez vous connecter pour publier un commentaire.
Supposons que vous avez le chemin d'accès au fichier journal (qui peut ou peut ne pas inclure le nom de fichier:
logfile.log
) dans la variable$full_path
. Ensuite, vous pouvez créer le dossier correspondant de l'arbre en cas de besoin:Maintenant,
$full_path
va contenir le chemin d'accès complet à lalogfile.log
fichier. L'arborescence des répertoires dans le chemin d'accès ont également été créées.OriginalL'auteur Alan Haggai Alavi
Mise à jour: comme Dave Croix souligné,
mkdir
seulement crée un répertoire unique. Donc, cela ne fonctionnera pas si vous voulez créer plusieurs niveaux à la fois.Utilisation de Perl
mkdir
de commande. Exemple:À l'aide de perl, la fonction est préférable à l'exécution d'une commande unix.
Edit: bien sûr, vous devriez également vérifier si le répertoire existe tout d'abord. Utilisation
-e
pour vérifier si quelque chose existe. En ajoutant à cela le code ci-dessus:mkdir()
est qui est ne peut créer qu'un niveau de répertoire à la fois. Si il est possible que vous serez la création de plusieurs niveaux (et c'est souvent), puis File: Chemin demake_path()
est une meilleure suggestion.merci pour cette clarification. Je pensais que j'avais testé à plusieurs niveaux, mais en regardant en arrière à ce que j'ai fait, mon test était défectueuse.
pourquoi vérifier si le répertoire existe en premier? Ne serait pas mkdir() va simplement de ne pas en mode silencieux si il ne l'est pas?
Le sélecteur "-e" retourne "vrai" aussi pour fichier - si nous voulons récursive de vérifier si le répertoire existe, je vous suggérons d'utiliser l'option "-d" à la place.
OriginalL'auteur dan1111