Веб-камера не распознается в Debian 11/sid

Когда ты бежал:

scp -r ${server}:${server_dir}/$(ssh ${server} "ls -t ${server_dir} | head -5")

... первая (важная )вещь, которая произошла, заключалась в том, что ваша локальная оболочка начала интерпретировать подстановку команд здесь:

$(ssh ${server} "ls -t ${server_dir} | head -5")

Приведенная выше подстановка команд в основном делает то, что вы думаете, за исключением того, что она прерывается, как только в имени файла появляется пробел или новая строка (или табуляция ). Например, у вас могут быть эти 5 последних файлов:

  • temp file
  • a
  • b
  • c
  • d

ssh... ls -t | head -5даст вам:

a
b
c
d
temp file

... но подстановка команды удаляет новые строки из вывода, оставляя вам возвращаемую строку:

a b c d temp file

... которое теперь неотличимо от настоящих, оригинальных имен файлов.

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

В результате я бы предложил направление, в котором вы безопасно извлекаете имена файлов в локальную систему, а затем специально извлекаете их:

server=server-name-here  ## replace with your values
server_dir=/tmp          ## replace with your values

files=($(ssh "$server" "zsh -c 'print -N -- ${server_dir}/*(om.[1,5])'" 2>/dev/null ) )
for f in ${files[1,5]}
do
  scp "${server}:${f}" logs/ios
done

Самое сложное — получить удаленный список пяти последних -измененных файлов. Здесь я подключаюсь к серверу по ssh и вызываю zsh, чтобы использовать его обширный механизм подстановки для возврата:

  • файлы из каталога ${server _}
  • которые oупорядочены по mвремени модификации
  • и обычные файлы(.)
  • и только первые пять:[1,5]

Команда zsh, встроенная -в print, используется здесь для возврата нулевого -разделенного --и нулевого -завершенного списка результирующих файлов. Эта строка, содержащая нуль -, передается обратно через ssh к zsh, который разбивает строку на пустые значения и присваивает содержимое массиву files.

Затем мы перебираем этот массив, стараясь захватить только первые пять элементов (, так как шестой имеет нулевое значение ),затем вызовите scpдля каждого из этих файлов по очереди.

Если вы хотите, вы можете тщательно создать строку имен удаленных файлов(${server}:${file1} ${server}:${file2}...)и вызвать scpтолько один раз. Возможно,:

scp ${server}:${(qq)^files[1,5]} logs/ios

... так как это указывает zsh добавить перед первыми пятью элементами массива строку (${server}, которая заменяется вашим реальным именем сервера, за которым следует двоеточие ). Любые имена файлов из массива заключаются в кавычки.

1
09.06.2021, 17:10
0 ответов

Теги

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