Переместить файл с сетевого компьютера на сервер

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

var='two  spaces'
printf '# "%s"\n'  "$var"
# "two  spaces"

ary=( 'two  spaces' '$USER' ) 
printf '# "%s"\n'  "${ary[@]}"
# "two  spaces"
# "$USER"

Как locate выводит полные пути,
, а опция -b означает поиск только в basename,
и вы хотите, чтобы перехватывалось только основное имя,
тогда вы можете использовать sed для удаления части /pa/th/.

Поскольку вы хотите искать "very very latest" в качестве полного основного имени,
и вы также хотите искать "очень" где угодно в basename,
тогда вам действительно нужно использовать регулярное выражение поиска.

  • -r Поиск базового regexp
  • --regex Поиск расширенного regexp (используется в примере ниже)

Чтобы ваш массив захватывал целые строки, вам нужно изменить Internal Field Separator (IFS) только на \n.

Обратите внимание, что элементы массива захватываются/сохраняются по мере их появления на выходе locate's. Чтобы расположить их в том же порядке, что и массив input, необходима дополнительная обработка массива (через for..grep..loop..awk ниже).

input=( '^very very latest$' 'very' )
IFS=$'\n'; foundfiles=($(locate -i -b --regex "${input[@]}" | sed 's|.*/||'))
foundfiles=($(for((i=0;i<${#input[@]};i++))
              do printf '%s\n' "${foundfiles[@]}" | grep -E "${input[i]}"
              done | awk '!seen[$0]++'))
printf '%s\n' "${foundfiles[@]}"

output - показывает полный массив, который имеет индексы [0] и [1]:

very very latest
heisvery

Если вам нужен вывод printf в кавычках, просто измените последнюю строку на
printf '"%s"\n' "${foundfiles[@]}"

... или если вам все еще нужно добавить кавычки в сам массив, добавьте следующие две строки после for..grep..loop

foundfiles=("${foundfiles[@]/#/\"}")
foundfiles=("${foundfiles[@]/%/\"}")

output - показывает полный массив, который имеет индекс [0] и [1]:

"very very latest"
"heisvery"
0
11.05.2018, 14:16
3 ответа

Si montó el sistema de archivos desde el servidor a través de un sistema de archivos en red como NFS, CIFS, sshfs, etc., simplemente realice una operación local dentro del punto de montaje.

Si el sistema de archivos del servidor no está montado localmente, necesitará usar una herramienta como scp o rsync para transferir el archivo a través de la red; consulte la documentación de la herramienta para conocer la sintaxis específica requerida.

8
28.01.2020, 02:13

En el título de la pregunta hablas de movingun archivo y luego dijiste que necesitas runen el servidor. Si entiendo su pregunta correctamente, ¿quiere ejecutar un script local en un servidor remoto? Puede usar ansiblepara eso desde su computadora local:

ansible ${SERVER} -m script -a "script.sh"
0
28.01.2020, 02:13

Suponiendo que tenga acceso ssh a la máquina de eliminación, esto se puede lograr conscp:

scp user@RemoteHost:/path/to/source /path/to/destination
0
28.01.2020, 02:13

Теги

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