Используйте scp для копирования файлов определенного расширения из каталога.

Si su preocupación es la seguridad de los datos en reposo, podría buscar una solución de cifrado en el NAS en su lugar (FreeNAS y Synology hacen esto ). Al iniciar, debe ingresar una clave para abrir el volumen, pero después de eso, funciona como un recurso compartido sin cifrar, por lo que no se requiere configuración del lado del cliente.

Si, por otro lado, le preocupa que los datos se tomen del servidor mientras se está ejecutando, tener un cifrado del lado del cliente resolvería su problema. ¿Algo como EncFS o Cryptomator podrían ser las soluciones más simples para su problema?

¿O tal vez entendí mal el problema?

-1
06.04.2019, 22:31
3 ответа

Вот код, который у меня сработал. Возможно, я не совсем точно описал свой вопрос, но у меня не было проблем с поиском последней измененной директории. Моя проблема заключалась в том, чтобы найти все файлы в этом каталоге и убедиться, что они оказались в нужном месте на моей локальной машине. Вот скрипт bash для этого:

# Grab the most recently updated ox file off of server; return as string
# in the form of ox_XXXXXXXX/assessment/LWR/validation/*
newest=$(
    ssh -qn username@server 'find /projects/ox/git/* -mindepth 0 -maxdepth 0 -type d -printf "%T@\t%f\n"' |
    sort -t$'\t' -r -nk1,2 |
    head -n1 |
    cut -f2- |
    awk '{print "/projects/ox/git/"$1"/assessment/LWR/validation/HBEP/analysis/BK363/*"}'
      )

# Take $newest and find all associated *_out.csv files beneath that directory
newestf=$(
    ssh -qn username@server "find $newest -type f -name '*_out.csv'"
    )

# Write these filepaths to a.csv on the local machine
echo "$newestf" | tr " " "\n" remote_fp.csv

# Run Rscript to parse and transform the filepaths so they go to the write place on local machine
Rscript ~/transform_fp.R

# Read content from.csv remote file paths - we'll need these to actually pull the files using scp
get_scp_fp=$(awk -F "\"*,\"*" '{print $1}' ~/remote_fp.csv)

# Read content from.csv local file paths - we'll need these to actually write the data locally
get_local_fp=$(awk -F "\"*,\"*" '{print $1}' ~/local_fp.csv)

# Loop through file paths and pull data from remote to local. 
for i in $get_scp_fp; do
    for j in $get_local_fp; do
    scp -p username@server:"$i" "$j"
    done
done

R-скрипт:

suppressPackageStartupMessages(library(tidyverse))

test <- read_csv("remote_fp.csv", col_names = FALSE)

str_replace_all(test$X1, "/projects/ox/git/ox_[0-9]{8}", "~/Documents/projects/ox") %>% 
  str_replace_all("(?:analysis).*$", paste0("doc/figures/", basename(.))) %>% 
  tibble() %>% 
  write_csv(path = "~/local_fp.csv", col_names = FALSE)
0
28.04.2021, 23:35

Будет найден последний измененный (созданный )каталог, при условии, что имя каталога не содержит новой строки(\n)

newest=$(
    ssh -qn REMOTE 'find./* -mindepth 0 -maxdepth 0 -type d -printf "%T@\t%f\n"' |
    sort -t$'\t' -r -nk1,2 |
    head -n1 |
    cut -f2-
)

Если вы можете гарантировать, что цель содержит только интересующие каталоги, вы можете значительно упростить ее (еще раз, принимая во внимание проблему с новой строкой)

newest=$(ssh -qn REMOTE ls -t | head -n1)

Вы можете скопировать целое дерево файлов, используя scp, но если вы хотите отфильтровать его, вам, вероятно, будет лучше использоватьrsync

rsync -av --include '*/' --include '*_out.csv' --exclude '*' --prune-empty-dirs REMOTE:"$newest" "$newest"

Если вы храните предыдущий набор файлов локально и действительно хотите добавить последний набор, не копируя предыдущие, rsyncможет сделать и это

rsync -av --include '*/' --include '*_out.csv' --exclude '*' --prune-empty-dirs REMOTE:.
0
28.04.2021, 23:35

Я немного изменил имена некоторых ваших переменных.

Конечно, есть способы сделать это лучше, чем что-то опасное, например разбор вывода ls , но посмотрите, сработает ли это для вас:

$ pth="/projects/ox/git"
$ server="myusername@server"
$ dir="$(ssh $server "ls -t \"$pth\" | head -1")"
$ mkdir -p "$pth/$dir"
$ scp -p $server:"$pth/$dir"/'*_out.csv' "$pth/$dir"/

После того, как dirбыл установлен на самый новый удаленный каталог, mkdir -pиспользуется для обеспечения того, чтобы такое же имя каталога существовало локально. Затем scpфайлы в локальный каталог с тем же путем и именем, что и в удаленном каталоге. Я искал решение для rsync, но не смог его придумать.

1
28.04.2021, 23:35

Теги

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