linux + 如何忽略(过滤)带有空格的文件

linux + 如何忽略(过滤)带有空格的文件

有时,文件名是由几个名称和每个名称之间的空格创建的,如下所示:

   $ touch  "A B C"
   $ ls
   A B C      <-- one file but has three words !                        
   file1
   file2
   file3

如何忽略(过滤)实际从几个名称创建的文件“ABC”?

预期产出

     $ ls <filter>
     file1
     file2
     file3

答案1

如果您执行以下操作:

ls | grep -F -v ' '

您将不会看到任何名称中带有空格的文件

(我曾经在示例中使用过fgrep而不是,但正如 Hauke Laging 指出的那样grep -F已弃用

答案2

使用 GNU ls,即在非嵌入式 Linux 下:

ls -I '* *'

并不是说有太多理由跳过名称中包含空格的文件。如果你这样做是因为脚本中有类似file_names=$(ls)或 的内容,for f in $(ls)不解析 ls 的输出,你的问题可能就会消失。

答案3

使用 KSH 的扩展 glob,您可以在 glob 扩展中过滤掉文件名:

ls -d -- !(A B C)

答案4

也许这也有帮助:

ls -l --quoting-style=literal:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 A B C

ls -l --quoting-style=locale:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 „A B C“

ls -l --quoting-style=shell:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 'A B C'

ls -l --quoting-style=shell-always:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 'A B C'

ls -l --quoting-style=c:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 "A B C"

ls -l --quoting-style=escape:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 A\ B\ C

相关内容