Comment puis-je vérifier si un fichier existe dans Perl?

J’ai un chemin relatif

$base_path = "input/myMock.TGZ"; 

myMock.TGZ est le nom du fichier situé dans le dossier d’entrée. Le nom de fichier peut changer. Mais le chemin est toujours stocké dans $base_path .

Je dois vérifier si le fichier existe dans $base_path .

Testez si quelque chose existe sur un chemin donné en utilisant l’opérateur -e fichier-test.

 print "$base_path exists!\n" if -e $base_path; 

Cependant, ce test est probablement plus large que prévu. Le code ci-dessus générera une sortie si un fichier simple existe à ce chemin, mais il déclenchera également un répertoire, un canal nommé, un lien symbolique ou une possibilité plus exotique. Voir la documentation pour plus de détails.

Étant donné l’extension de .TGZ dans votre question, il semble que vous attendiez un fichier simple plutôt que les alternatives. L’opérateur de test de fichier -f demande si un chemin mène à un fichier brut.

 print "$base_path is a plain file!\n" if -f $base_path; 

La documentation de perlfunc couvre la longue liste des opérateurs de test de fichiers de Perl qui couvrent de nombreuses situations que vous rencontrerez dans la pratique.

  • -r
    Le fichier est lisible par uid / gid effectif.
  • -w
    Le fichier est accessible en écriture par l’ID / gid effectif.
  • -x
    Le fichier est exécutable par uid / gid effectif.
  • -o
    Le fichier appartient à uid effectif.
  • -R
    Le fichier est lisible par le vrai uid / gid.
  • -W
    Le fichier est accessible en écriture par le vrai uid / gid.
  • -X
    Le fichier est exécutable par le vrai uid / gid.
  • -O
    Le fichier appartient à real uid.
  • -e
    Le fichier existe.
  • -z
    Le fichier a une taille nulle (est vide).
  • -s
    Le fichier a une taille différente de zéro (retourne la taille en octets).
  • -f
    Le fichier est un fichier simple.
  • -d
    Le fichier est un répertoire.
  • -l
    Le fichier est un lien symbolique (faux si les liens symboliques ne sont pas pris en charge par le système de fichiers).
  • -p
    Le fichier est un tube nommé (FIFO) ou Filehandle est un tube.
  • -S
    Le fichier est un socket.
  • -b
    Le fichier est un fichier spécial de bloc.
  • -c
    Le fichier est un fichier spécial de caractères.
  • -t
    Filehandle est ouvert à un tty.
  • -u
    Le fichier a le bit setuid défini.
  • -g
    Le fichier contient le bit setgid.
  • -k
    Le fichier a le bit sticky défini.
  • -T
    Le fichier est un fichier texte ASCII ou UTF-8 (estimation heuristique).
  • -B
    Le fichier est un fichier “binary” (opposé à -T ).
  • -M
    Heure de début du script moins l’heure de modification du fichier, en jours.
  • -A
    Même chose pour le temps d’access.
  • -C
    Idem pour le temps de changement d’inode (Unix, peut différer pour les autres plates-formes)

Vous voudrez peut-être une variante de existe … perldoc -f “-f”

  -X FILEHANDLE -X EXPR -X DIRHANDLE -XA file test, where X is one of the letters listed below. This unary operator takes one argument, either a filename, a filehandle, or a dirhandle, and tests the associated file to see if something is true about it. If the argument is omitted, tests $_, except for "-t", which tests STDIN. Unless otherwise documented, it returns 1 for true and '' for false, or the undefined value if the file doesn't exist. Despite the funny names, precedence is the same as any other named unary operator. The operator may be any of: -r File is readable by effective uid/gid. -w File is writable by effective uid/gid. -x File is executable by effective uid/gid. -o File is owned by effective uid. -R File is readable by real uid/gid. -W File is writable by real uid/gid. -X File is executable by real uid/gid. -O File is owned by real uid. -e File exists. -z File has zero size (is empty). -s File has nonzero size (returns size in bytes). -f File is a plain file. -d File is a directory. -l File is a symbolic link. -p File is a named pipe (FIFO), or Filehandle is a pipe. -S File is a socket. -b File is a block special file. -c File is a character special file. -t Filehandle is opened to a tty. -u File has setuid bit set. -g File has setgid bit set. -k File has sticky bit set. -T File is an ASCII text file (heuristic guess). -B File is a "binary" file (opposite of -T). -M Script start time minus file modification time, in days. 
 if (-e $base_path) { # code } 

-e est l’opérateur ‘existence’ en Perl.

Vous pouvez vérifier les permissions et autres atsortingbuts en utilisant le code de cette page .

Vous pouvez utiliser: if(-e $base_path)

Utilisation:

 if (-f $filePath) { # code } 

-e renvoie true même si le fichier est un répertoire. -f ne retournera que true s’il s’agit d’un fichier réel

 #!/usr/bin/perl -w $fileToLocate = '/whatever/path/for/file/you/are/searching/MyFile.txt'; if (-e $fileToLocate) { print "File is present"; } 
 if(-e $base_path){print "Something";} 

ferait le tour

Utilisez le code ci-dessous. Ici -f vérifie, c’est un fichier ou non:

 print "File $base_path is exists!\n" if -f $base_path; 

et apprécie