На моем компьютере с Linux я могу использовать команду file для просмотра содержимого каталога, используя его следующим образом:
file /home/user/*
Он печатает тип файла для каждого файла в каталоге / home / user /. Таким образом, я могу узнать список всех файлов в этом каталоге.
Однако на удаленной машине с Linux я не могу использовать подстановочный знак с командой file.
file /home/user/*
/home/user/*: cannot open `/home/user/*' (No such file or directory)
Команда file не поддерживает символы подстановки в определенных версиях Linux? Или это ограничение?
Благодарю.
echo $0
ls /home/user/
файлы будут показаны в каталоге без использования подстановочного знака. Вы можете добавить-l
для получения дополнительной информации, хотя, конечно, не то, чтоfile
показывает.Ответы:
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
, илиshopt -s nullglob
.Это означает, что либо:
set +f
чтобы включить)Если ваша конечная цель в действительности состоит в том, чтобы « запустить
find
все сущности в/home/user/
», то вы можете попробовать следующее:-maxdepth 1
предотвращает рекурсию-type f
показывает только файлы (не каталоги, символические ссылки и т.д ...)find
Аргументы '-print0
иxargs
'-0
используются вместе, чтобы использовать символ NUL (\0
) для разделения записей, так как специальные символы строки newline (\n
) допустимы в именах файлов.xargs
будет использовать записи, предоставленные черезstdin
, и использовать их как дополнительные параметры для указанной команды (file
в этом случае)По умолчанию (
set +f
/shopt -u nullglob
)Нет Globbing (
set -f
/shopt -u nullglob
)Расширение Null Glob (
set +f
/shopt -s nullglob
)источник