【问题标题】:Using ls -lR ignore given REGEX使用 ls -lR 忽略给定的正则表达式
【发布时间】:2020-06-27 08:56:38
【问题描述】:

我正在使用 ls -lR | ... 来获得我想要的输出,但现在我需要一些东西来强制 ls 忽略给定的正则表达式。有可能实现这一目标吗?我找到了ls -Ils --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


【解决方案1】:

试试这个: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
:=>

【讨论】:

  • 这可以正常工作,但是它会删除所有内容,直到最后我对吗?我给出了错误的例子。在./NOT_THIS 之后可以有另一个文件夹./THIS_YES,它也会被删除。
  • sed '/\.\/NOT_THIS/, /^$/'d 这将适用于更新的示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
相关资源
最近更新 更多