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