![linux + 如何忽略(过滤)带有空格的文件](https://linux22.com/image/48884/linux%20%2B%20%E5%A6%82%E4%BD%95%E5%BF%BD%E7%95%A5%EF%BC%88%E8%BF%87%E6%BB%A4%EF%BC%89%E5%B8%A6%E6%9C%89%E7%A9%BA%E6%A0%BC%E7%9A%84%E6%96%87%E4%BB%B6.png)
有时,文件名是由几个名称和每个名称之间的空格创建的,如下所示:
$ 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