logo - ¿Cómo puedo verificar si existe un archivo en Perl?
perl strawberry (8)
Tengo un camino relativo
$base_path = "input/myMock.TGZ";
myMock.TGZ
es el nombre del archivo ubicado en la carpeta de entrada. El nombre del archivo puede cambiar. Pero la ruta siempre se almacena en $base_path
.
Necesito verificar si el archivo existe en $base_path
.
Es posible que desee una variante de existe ... perldoc -f "-f"
-X FILEHANDLE
-X EXPR
-X DIRHANDLE
-X A 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.
Pruebe si existe algo en una ruta determinada utilizando el operador de prueba de archivo -e
.
print "$base_path exists!/n" if -e $base_path;
Sin embargo, esta prueba es probablemente más amplia de lo que pretendes. El código anterior generará resultados si existe un archivo simple en esa ruta, pero también se activará para un directorio, una tubería con nombre, un enlace simbólico o una posibilidad más exótica. Ver la documentación para más detalles.
Dada la extensión de .TGZ
en su pregunta, parece que espera un archivo simple en lugar de las alternativas. El operador de prueba de archivo -f
pregunta si una ruta conduce a un archivo simple.
print "$base_path is a plain file!/n" if -f $base_path;
La documentación de perlfunc cubre la larga lista de operadores de pruebas de archivos de Perl que cubre muchas situaciones que encontrará en la práctica.
-r
El archivo es legible por uid / gid efectivo.-w
El archivo se puede escribir mediante uid / gid efectivo.-x
El archivo es ejecutable por uid / gid efectivo.-o
El archivo es propiedad de uid efectivo.-R
El archivo es legible por uid / gid real.-W
El archivo puede ser escrito por uid / gid real.-X
El archivo es ejecutable por uid / gid real.-O
El archivo es propiedad de uid real.-e
El archivo existe.-z
El archivo tiene un tamaño cero (está vacío).-s
El archivo tiene un tamaño distinto de cero (devuelve el tamaño en bytes).-f
El archivo es un archivo simple.-d
El archivo es un directorio.-l
El archivo es un enlace simbólico (falso si los enlaces simbólicos no son compatibles con el sistema de archivos).-p
File es una tubería con nombre (FIFO), o Filehandle es una tubería.-S
El archivo es un zócalo.-b
El archivo es un archivo especial de bloque.-c
El archivo es un archivo especial de caracteres.-t
Filehandle se abre en un tty.-u
El archivo tiene setuid bit set.-g
El archivo tiene setgid bit set.-k
El archivo tiene un conjunto de bits adhesivo.-T
El archivo es un archivo de texto ASCII o UTF-8 (suposición heurística).-B
El archivo es un archivo "binario" (opuesto a-T
).-M
Tiempo de inicio del script menos el tiempo de modificación del archivo, en días.-A
Lo mismo para el tiempo de acceso.-C
Lo mismo para el tiempo de cambio del inodo (Unix, puede diferir para otras plataformas)
Puede usar: if(-e $base_path)
Usa el siguiente código Aquí -f verifica, es un archivo o no:
print "File $base_path is exists!/n" if -f $base_path;
y disfrutar
Utilizar:
if (-f $filePath)
{
# code
}
-e
devuelve verdadero incluso si el archivo es un directorio. -f
solo devolverá verdadero si es un archivo real
#!/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)
{
# code
}
-e
es el operador de ''existencia'' en Perl.
Puede verificar permisos y otros atributos usando el código en esta página .
if(-e $base_path){print "Something";}
haría el truco