如何转义包含特殊字符(如 - 或空格)的文件

如何转义包含特殊字符(如 - 或空格)的文件

目录的内容:

$ 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 -- *

--表示命令选项的结束。因为文件命令认为-文件名是选项的一部分。

相关内容