【发布时间】:2020-06-27 08:56:38
【问题描述】:
我正在使用 ls -lR | ... 来获得我想要的输出,但现在我需要一些东西来强制 ls 忽略给定的正则表达式。有可能实现这一目标吗?我找到了ls -I 和ls --ignore,但由于某种原因我得到:非法选项错误 [macOS Catalina 10.15.3]。我需要它来处理最常用的 shell(bash、ksh、zsh 等)
输出
ls -lR | ...
./NOEMPTY:
total 72
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 10.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 15.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 20.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 25.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 30.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 35.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 40.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 5.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b.c
./NOT_THIS:
total 32
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 30 2.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 30.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 35 2.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 35.c
./THIS_YES:
total 32
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 30 2.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 30.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 35 2.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 35.c
期望的输出:
ls -lR IGNORE NOT_THIS | ... something more
./NOEMPTY:
total 72
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 10.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 15.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 20.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 25.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 30.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 35.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 40.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 5.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b.c
./THIS_YES:
total 32
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 30 2.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 30.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 35 2.c
-rw-r--r--@ 1 makaveli_10 staff 34 Mar 15 09:26 1b copy 35.c
我尝试使用 sed 实用程序但未能实现这一点,因为我无法在文件夹之间选择空行,例如:
ls -lR | sed -n '/.\/NOT_THIS/,/[[:space:]]/p'
【问题讨论】:
-
你到底想用这个输出做什么?使用 shell 循环可能会更好,因为解析
ls充其量是有问题的。 -
我正在做文件大小直方图,它工作正常,但我必须实现 -i 选项,这将忽略给定的模式。为什么会有这么大的问题?
-
mywiki.wooledge.org/ParsingLs 解释了一些问题。一个非常广泛的概述是
ls的输出因平台而异,文件名中的空格或其他不方便的字符可能会导致问题。如果您提供有关如何使用输出的更多详细信息(您只需要文件大小吗?)那么我们可以推荐一个更合适的工具。
标签: bash shell unix ls utilities