使用 ls -lR 忽略给定的正则表达式

Using ls -lR ignore given REGEX

我正在使用 ls -lR | ... 来获得我想要的输出,但现在我需要一些东西来强制 ls 忽略给定的正则表达式。有可能实现这一目标吗?我找到了 ls -Ils --ignore 但由于某种原因我得到: 非法选项错误 [macOS卡特琳娜 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 实用程序但未能实现,因为我无法 select 文件夹之间的空行,例如: ls -lR | sed -n '/.\/NOT_THIS/,/[[:space:]]/p'

试试这个:ls -lR -I '*NOT_THIS*'

演示:

:=>ls -1
1.txt
2.txt
a.csv
b.csv
:=>ls -1 -I '*txt'
a.csv
b.csv
:=>

使用 SED

sed '/\.\/NOT_THIS/, /^$/'d

解释:sed '/start/,/end/d' <-- 这将删除第一个 /<patern>/ 和第二个模式之间的所有数据。

^$ <-- 空白行。 ^ -- 记录开始。 $ -- 记录结束

演示:

:=>sed '/\.\/NOT_THIS/, /^$/'d file.txt
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

./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
:=>