目录的内容:
$ 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
我该如何逃脱或者保护*
?
答案1
只需使用以下内容
file ./*
一切都是必需的。
答案2
您可以通过将选项开关作为参数file
传递来告诉(以及大多数其他 Unix 命令行工具)停止查找选项开关。因此,以下内容将起作用:--
file -- *
(当然,val0x00ff 的建议file ./*
也行得通,但会导致./
出现在输出中的文件名前面。)
答案3
简单的:
file -- *
--
表示命令选项的结束。因为文件命令认为-
文件名是选项的一部分。