Как экранировать файлы, содержащие специальные символы, такие как - или пробелы

Содержание каталога:

$ ls -l
total 122639
-rw-r--r-- 1 125578080 Aug 20 17:47 - Diana Krall, Stan Getz & Oscar Peterson.7z
drwxr-xr-x 4      4096 Aug 20 18:02 Java

Я хочу использовать file команда в этом каталоге, куда копируется множество различных файлов

$ file *

Результат, который я ожидаю:

$ file *
- Diana Krall, Stan Getz & Oscar Peterson.7z: 7-zip archive data, version 0.3
java: directory

В результате я получаю:

$ file *
file: illegal option --
file: illegal option -- D
file: illegal option -- a
file: illegal option -- a
file: illegal option --
file: illegal option -- K
file: illegal option -- a
file: illegal option -- l
file: illegal option -- l
file: illegal option -- ,
file: illegal option --
file: illegal option -- S
file: illegal option -- t
file: illegal option -- a
file: illegal option --
file: illegal option -- G
Usage: file [-bchikLNnprsvz0] [--apple] [--mime-encoding] [--mime-type]
            [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...
       file -C [-m magicfiles]
       file [--help]

Я могу прописать имена файлов и избежать их вручную, но я хочу использовать *:

$ file -- -\ Diana\ Krall\,\ Stan\ Getz\ \&\ Oscar\ Peterson.7z
- Diana Krall, Stan Getz & Oscar Peterson.7z: 7-zip archive data, version 0.3

$ file java
java: directory

Как я могу сбежать или защитить *?

3 ответа

Решение

Используйте только следующее

file ./*

Все нужно.

Ты можешь сказать file (и большинство других инструментов командной строки Unix), чтобы прекратить поиск переключателей параметров, передав их -- в качестве аргумента. Таким образом, будет работать следующее:

file -- *

(Конечно, предложение Val0x00ff о file ./* тоже будет работать, но вызовет ./ отображаться перед именами файлов в выходных данных.)

Просто:

file -- *

-- Означает завершение настроек команды. Потому что файловая команда думаю - в имени файла является частью вашего варианта.

Другие вопросы по тегам