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 вы можете:
- Отключить " срывать " целиком, запустив
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Аргументы ' -print0и xargs' -0используются вместе, чтобы использовать символ NUL ( \0) для разделения записей, так как специальные символы строки newline ( \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
Нет Globbing ( 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
echo $0