выполнять только чтение, если файл закрыт

Вы можете добавить к команде sftp опцию

-o NumberOfPasswordPrompts=1

, чтобы она не запрашивала пароль дважды. Вы также можете попробовать

-o ConnectTimeout=20
-o ConnectionAttempts=1
2
23.10.2018, 04:58
3 ответа

Creo que tengo la respuesta. Pon esto como parte de tu script:

#!/bin/bash
# Script to prevent writing to a certain file.  
# This should be adjusted to your needs, replace all /paths/ and <xxxxxxx> 
# with your true paths and filenames.  
chmod +r /path_to_file/<filename>
<now_do_what_you_want_with_that_file, command(s) here>
for a in {120..1}; do echo -n "$a..." && sleep 1; done    # In 120 seconds <filename> will be writable.
chmod -r /path_to_file/<filename>

También se puede crear una secuencia de comandos para copiar ese archivo a otra ubicación, luego leer su copia que no está abierta ni en uso , y una vez que haya terminado, elimínela después de X cantidad de segundos.

Esto se puede repetir todo lo que quieras si es necesario.

0
27.01.2020, 22:33

Descargo de responsabilidad :No sé mucho sobre QNX, y menos aún sobre dispositivos integrados.

Lo que está preguntando es básicamente sobre el bloqueo de archivos :Un proceso intenta adquirir un bloqueo compartido (bloqueo de lectura )en un archivo de bloqueo para realizar algunas operaciones. Si otro proceso mantiene un bloqueo exclusivo (de escritura )en el mismo bloqueo, el primer proceso se bloqueará hasta que se libere el bloqueo exclusivo. o al revés,un proceso puede adquirir un bloqueo exclusivo solo si no hay otros procesos con bloqueos compartidos/exclusivos activos compartidos.

Para realizar el bloqueo de archivos obligatorio , esto debe ser compatible con el núcleo. Hay muy pocos sistemas Unix que implementen esto de una manera que funcione de manera confiable desde un script de shell (para Linux, consulte este texto de 2007 y esta pregunta en StackOverflow ).

El bloqueo de aviso se implementa en el espacio de usuario mediante programas como flock. Este tipo de bloqueo de archivos requiere que los procesos cooperen , lo que significa que deberán solicitar explícitamente acceso de lectura o escritura al archivo de bloqueo. Al mismo tiempo, un proceso no cooperativo aún puede ignorar el mecanismo de bloqueo.

La pregunta " Flock no parece estar funcionando " es sobre el bloqueo de aviso usando flocken el shell.

Ver también:¿Qué comandos de Unix se pueden usar como semáforo/bloqueo?(esto también se trata de bloqueo de aviso, y algunas respuestas usan mkdirpara este propósito, ya que es una operación atómica ).

0
27.01.2020, 22:33

Si no sabe si el archivo está escrito actualmente y no tiene la oportunidad de averiguar si un programa lo está usando, puede pensar en verificar ctime, mtime y atime. Puede hacer esto con el comando "stat" que debería estar disponible en la mayoría de los sistemas. Puedes comprobarlo 3 -4 veces y si no hay diferencia, escribirlo. ¡Tenga en cuenta que el tiempo de acceso atime ()siempre cambiará mientras lo marque!

Otra idea es hacer una copia de su archivo y trabajar con esa copia. Después de hacer tus cosas, haz una diferencia entre tu copia modificada y el original y reemplázalo si no hay otros cambios. De lo contrario, puede intentar trabajar con "diff" y "patch". ¡Recomiendo hacer una copia de seguridad antes de hacer esto!

0
27.01.2020, 22:33

Теги

Похожие вопросы