Как использовать входной файл с неточными именами файлов для операции?

Если это может кому-то помочь, то после практического использования всего описанного выше в моем ubuntu 16.04, наконец, это было так просто, как подключиться через " Приложение Bose Connect »(в моем случае для Android).Я использовал для этого blueman и, наконец, смог соединить гарнитуры.

В моем случае у меня bluez 5.37v, blueman 2.0.4, и, наконец, мне не нужно было вносить какие-либо изменения в /etc/bluetooth/main.conf по умолчанию, с установленным по умолчанию "ControllerMode" на дуал сработало.

Для меня сработали следующие шаги:

1.- Откройте приложение и выберите вариант подключения нового устройства или аналогичного. (Я не помню точно название) 2.- В blueman найдите новое устройство. 3.- Как только гарнитуры были найдены, я смог без проблем соединить их и выберите рабочий режим.

Без первого шага я не смог бы их соединить.

Я много раз искал, как это делать, но как только ты знаешь, как это делать, делать это довольно легко.

3
15.01.2017, 23:29
3 ответа

С помощью zsh вы можете использовать его возможность приблизительного сопоставления:

approx-cat() {
  emulate -L zsh
  setopt extendedglob nullglob
  local err files
  for ((err = 0; err <= $1; err++)); do
    files=((#a$err)$2)
    case $#files in
      (1) cat -- $files; return;;
      (0) ;;
      (*) echo >&2 "$#files found at error count $err:"
          printf >&2 '  "%s"\n' $files
          return 1;;
    esac
  done
  return 1
}

И позвоните как:

approx-cat 3 'directory/file with spaces'

Чтобы разрешить до 3 ошибки в имени файла.

Пример:

$ approx-cat 3 /ebc/passwds
2 found at error count 2:
  "/etc/passwd"
  "/etc/passwd-"
$ approx-cat 3 /ebc/Issue
Debian GNU/Linux stretch/sid \n \l
0
27.01.2020, 21:37

Преобразуйте имена объединенных файлов в шаблоны, соответствующие оригинальным файлам.

#!/bin/bash
shopt -s nullglob extglob
IFS=$'\n'
while read -r filename; do
  pattern=${filename//\\/\\\\}
  pattern=${pattern//\[/\\\[}
  pattern=${pattern//\(/\\\(}
  pattern=${pattern//\*/\\\*}
  pattern=${pattern//\?/\\\?}
  pattern=${pattern//_/'[ _]'}
  matches=($pattern@())
  case ${#matches[@]} in
    0) echo "No match for $filename";;
    1) echo "$filename found as ${matches[0]}";;
    *) echo "$filename matches ${#matches[@]} files";;
  esac
done <inputfile
0
27.01.2020, 21:37

Подход, который я бы использовал, состоит в том, чтобы взять выходные данные ls, настроить массив, отображающий преобразованное имя обратно в исходное имя, а затем обработать каждую строку входного файла. Если входные данные находятся в массиве, выведите значение массива, в противном случае добавьте строку ввода в отсутствующий файл . Например, поместите это в файл, перейдите в каталог и запустите его с входным файлом в качестве параметра

#!/usr/bin/awk
# set up an array t of translations
BEGIN {
    while (("ls" | getline )>0) {
        k=$0
        gsub(/ /,"_")
        if ($0 in t) {
            print "$0 matches more than one file" > /dev/stderr
            exit(2)
        }
        t[$0]=k
    }
    close("ls")
}
    { if ($0 in t) {
            print t[$0]
        } else {
            print $0 > "../missing"
        }
    }
0
27.01.2020, 21:37

Теги

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