¿Existe un comando para mostrar el mensaje "Sí" si existe un archivo en particular? No es necesario dar funcionalidad si el archivo no existe.
                    
                        command-line
                                
                    
                    
                        James
fuente
                
                
            fuente

[ -e FILENAME ] && echo YesFILENAMEes una expansión variable o contiene caracteres especiales, no olvide citarla. por ejemplo, en un guión,[ -e "$1" ] && echo Yes.[[y en]]lugar de citar la variable.[[ ]], siempre es un buen hábito para los principiantes que no recuerdan las reglas especiales para dentro del[[ ]]operador, o para contextos aritméticos.Puedes usar este simple script:
Guárdalo como
file-exists.sh. Luego, en la Terminal, escribachmod +x file-exists.sh.Úselo como:
./file-exists.sh FILEdonde reemplazaFILEcon el archivo que desea verificar, por ejemplo:Si
file.txtexiste,Yesse imprimirá en la Terminal y el programa saldrá con el estado 0 (correcto). Si el archivo no existe, no se imprimirá nada y el programa saldrá con el estado 1 (error).Si tienes curiosidad por qué incluí el
exitcomando, sigue leyendo ...¿Qué pasa con el
exitcomando?exitprovoca la terminación normal del proceso. Lo que esto significa es, básicamente: detiene el script. Acepta un parámetro opcional (numérico) que será el estado de salida del script que lo llamó.Este estado de salida permite que sus otros scripts utilicen su
file-existsscript y es su forma de saber si el archivo existe o no.Un ejemplo simple que pone esto en uso es este script (guárdelo como
file-exists-cli.sh):Haga lo habitual
chmod +x file-exists-cli.shy luego ejecutarlo:./file-exists-cli.sh. Verás algo como esto:El archivo existe (
exit 0):El archivo no existe (
exit 1):fuente
"$1". Si tiene espacio en blanco, se romperá sin comillas y pueden ocurrir otras cosas malas.En el shell bash en la línea de comando.
Esto utiliza el operador condicional bash
-fy verifica si el archivo existe y si es un archivo normal. Si desea probar cualquier archivo, incluidos directorios y enlaces, utilice-e.Este es un gran recurso para los condicionales de bash.
fuente
testsu formato original, sé que es excesivo, pero es un hábito mío.[comando, que generalmente se llama un builtin incorporado). Corrigen las inconsistencias y los comportamientos tontos de la versión de llave simple. El [incorporado permanece por compatibilidad, pero no veo ninguna buena razón para usarlo en el nuevo código bash. (Si necesita escribir scripts compatibles con POSIX que puedan ejecutarse en shells antiguos o algo así, eso es diferente.)[son dudosas.type -a [para mí enumera "shell incorporado", luego "/usr/bin/[."typeresultados parecen corroborar lo que dije, ¿no?El comando más corto para hacer lo que quieres es:
test -eprobará si el nombre dado existe en el sistema de archivos. (Puede usartest -fpara restringir solo a archivos normales. Consulteman testpara obtener más información).Si la condición dada se evalúa como verdadera,
testdevuelve un estado de salida exitoso (de lo contrario, devuelve un estado de falla). Combinamos los dos comandos usando&&, lo que significa "ejecutar el siguiente comando si el comando anterior salió con un estado de éxito". El siguiente comando simplemente imprimeYesen la salida estándar; en el caso de un shell interactivo, en el terminal.Esto evita el material textual adicional de una
ifdeclaración, pero da el mismo resultado. Usar&&(o su opuesto||) para vincular comandos funciona bien cuando solo se trata de un comando. Si desea hacer más que ejecutar un solo comando en respuesta al estado de salida de un solo comando, el uso de laifsintaxis se vuelve mucho más legible rápidamente.Como ya se señaló en otras respuestas, la
ifconstrucción de estilo equivalente sería:o alternativamente:
Para estos fines,
[ytestson equivalentes, excepto que[exige una terminación].fuente
Para cubrir este tipo de preguntas, hay varias formas, y aquí hay otra: use el
findcomando con-execbandera. La ruta al archivo se puede dividir en dos partesfind /etcque establece el directorio y-name FILENAMEque especifica el nombre del archivo (¡duh!).-maxdepthseguiráfindtrabajando/etcsolo con el directorio y no descenderá a subdirectoriosOtra forma, a través de
stat:Y alternativamente a través de python:
O una alternativa de línea de comando corta:
fuente