Linux +, как проигнорировать (фильтрует) файл с пространством

Так как это - довольно сложный вопрос, я просто предоставлю несколько инструкций:

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

    varx="$([command which might print a value ending in \n]; echo x)"
    var="${varx%x}"
    
  • -- в командах необходимо для разделения аргументов от имен файлов, так как имена файлов могут запуститься с --, и был бы поэтому обработан как параметры.
    • find не поддерживает этот синтаксис, так использование readlink получить полный путь, который по определению запускается с наклонной черты или удостоверяется что путь, данный find является уже абсолютным или запускается с ./.
  • Используйте замену процесса с <( вместо каналов для предотвращения поврежденных каналов, когда процесс отправки завершается.
  • Используйте дескриптор файла между 3 и 9 для передачи данных вместо стандартного входа для предотвращения жадных команд как cat или ssh прихлебывание всего этого.
  • Прежде всего, тест! Я обычно использую это имя файла для тестирования материала, упомянул выше: $'--$`!*@\a\b\E\f\r\t\v\\\'"\360\240\202\211 \n'

4
28.04.2013, 17:49
4 ответа

Если Вы делаете следующее:

ls | grep -F -v ' '

Вы не будете видеть файла с пробелами на имена

(Я раньше имел fgrep вместо grep -F в примере, но как Отстающий Hauke, указанный, который удерживается от использования),

5
27.01.2020, 20:47
  • 1
    , который я заключаю своей документации в кавычки: "Прямой вызов как fgrep удерживается от использования" –  Hauke Laging 28.04.2013, 18:16
  • 2
    @HaukeLaging, Конечно, благодарит указать. После 29 лет использования fgrep Я должен изменить свои привычки, которые возьмут немного –  Anthon 28.04.2013, 18:52
  • 3
    .. хотя можно видеть части имени файла, которое содержит пробелы, один или несколько символов новой строки и по крайней мере одну строку, не содержащую пробелы.Помните? grep работы над строками и именем файла могут быть сделаны из нескольких строк. –  Stéphane Chazelas 06.05.2013, 23:20
  • 4
    @HaukeLaging @Anthon: Я [печально] должен добавить это egrep также удерживается от использования и grep -E теперь стандарт. –  erch 06.05.2013, 23:36

С GNU ls, т.е. в соответствии с невстроенным Linux:

ls -I '* *'

Не то, чтобы существует большая часть причины пропустить файлы, имя которых содержит пространство. Если Вы делаете это, потому что у Вас есть что-то как file_names=$(ls) или for f in $(ls) в сценарии не анализируйте вывод ls, и Ваша проблема, вероятно, уйдет.

3
27.01.2020, 20:47

Используя расширенные шарики KSH, можно отфильтровать имена файлов в расширении шарика:

ls -d -- !(A B C)
2
27.01.2020, 20:47

Возможно, это также полезно:

ls -l --quoting-style=literal:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 A B C

ls -l --quoting-style=locale:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 „A B C“

ls -l --quoting-style=shell:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 'A B C'

ls -l --quoting-style=shell-always:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 'A B C'

ls -l --quoting-style=c:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 "A B C"

ls -l --quoting-style=escape:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 A\ B\ C
1
27.01.2020, 20:47

Теги

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