file утилита не обрабатывает подстановочные знаки, оболочка ...
Оболочка, скорее всего, bash или dash или sh , или что-то подобное - вы можете запустить echo $0 в командной строке, чтобы увидеть, что работает.
Как упоминалось выше, подстановочные знаки обрабатываются оболочкой (а не приложением), и поведение расширения по умолчанию может быть немного неожиданным. Bash, например, будет использовать следующее поведение:
- Если
/home/user либо не существует, либо в нем ничего нет, то /home/user/* не будет расширяться, но останется как есть (то есть: /home/user/*).
- Если
/home/user - это каталог с двумя файлами a и b , то /home/user/* развернется до /home/user/a /home/user/b .
С помощью bash вы можете:
- Отключите " globbing " полностью, запустив
set -f или
- Расширьте « glob » до нуля, если он ничего не соответствует, запустив
shopt -s nullglob .
Это означает, что либо:
- Удаленная оболочка не поддерживает глобализацию
- В удаленной оболочке по умолчанию отключено глобирование (попробуйте запустить
set +f чтобы включить его)
Если ваша конечная цель действительно состоит в том, чтобы « запустить find для всех сущностей в /home/user/ », то вы можете попробовать следующее:
find /home/user/ -maxdepth 1 -type f -print0 \
| xargs -0 file
-maxdepth 1 предотвращает рекурсию
-type f показывает только файлы (не каталоги, символические ссылки и т. д.)
- Аргументы
find 's -print0 и xargs ' -0 используются вместе, чтобы использовать символ NUL (\0) для разделения записей, поскольку в именах файлов допустимы символы новой строки (\n).
xargs будет использовать записи, предоставленные через stdin , и использовать их в качестве дополнительных параметров для указанной команды (в данном случае file)
По умолчанию (set +f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b
Без глобализации (set -f / shopt -u nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob x/*
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/*
Расширение Null Glob (set +f / shopt -s nullglob)
$ tree
.
└── x
1 directory, 0 files
$ echo glob x/*
glob
$ touch x/a x/b
$ tree
.
└── x
├── a
└── b
$ echo glob x/*
glob x/a x/b