Доступ к камере Android с помощью Linux Mint без использования дополнительного программного обеспечения

Вы можете написать fix-non-delimited-lineскрипт типа:

#! /bin/zsh -
zmodload zsh/system || exit
ret=0
for file do
  if sysopen -rwu0 -- "$file"; then
    if sysseek -w end -1; then
      read -r x || print -u0
    else
      syserror -p "Can't seek in $file before the last byte: "
      ret=1
    fi
  else
    ret=1
  fi
done
exit $ret

В отличие от некоторых приведенных здесь решений,

  • должен быть эффективным в том смысле, что он не разветвляет ни один процесс, читает только один байт для каждого файла и не перезаписывает файл поверх (просто добавляет новую строку)
  • не нарушает символические/жесткие ссылки и не влияет на метаданные (также ctime/mtime обновляются только при добавлении новой строки)
  • должен работать нормально, даже если последний байт имеет значение NUL или является частью многобайтового символа -.
  • должно работать нормально независимо от того, какие символы или не -символы могут содержаться в именах файлов
  • Должен правильно обрабатывать нечитаемые, недоступные для записи или недоступные для поиска файлы (и сообщать об ошибках соответственно)
  • Не следует добавлять новую строку в пустые файлы (, но в этом случае сообщает об ошибке о недопустимом поиске)

Вы можете использовать его, например, как:

that-script *.txt

или:

git ls-files -z | xargs -0 that-script

POSIX, вы могли бы сделать что-то функционально эквивалентное с

export LC_ALL=C
ret=0
for file do
  [ -s "$file" ] || continue
  {
    c=$(tail -c 1 | od -An -vtc)
    case $c in
      (*'\n'*) ;;
      (*[![:space:]]*) printf '\n' >&0 || ret=$?;;
      (*) ret=1;; # tail likely failed
    esac
  } 0<> "$file" || ret=$? # record failure to open
done
1
05.07.2020, 12:46
0 ответов

Теги

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