我需要检查所有子目录并报告它们包含多少文件(无需进一步递归):
directoryName1 numberOfFiles
directoryName2 numberOfFiles
Run Code Online (Sandbox Code Playgroud) 我想列出密码的内容并仅显示以点开头的文件。我试过了,ls -a | grep ^\.
但我无法弄清楚为什么输出还包含不以点开头的文件。例如:
Pictures
.pip
.pki
.profile
projects
Public
Run Code Online (Sandbox Code Playgroud)
我知道我可以实现我想要的ls -ld .*
我只是对我无法解释的 grep 的这种行为感到好奇。
我发现在管道中使用 find 然后使用 grep -v 来过滤文件而不是开发复杂的正则表达式模式要容易得多。但是,当我像这样将某些东西通过管道传输到 zmv 时:
find | grep -v TFLM | zmv "(*)" "TFLM \$1"
Run Code Online (Sandbox Code Playgroud)
它只是忽略输入并继续将转换应用于所有文件。有没有办法告诉它使用管道输入?我想我可以移开过滤掉的文件,然后使用 zmv,但这并不是真正的解决方案。
ls
似乎有许多对我来说很奇怪的限制,这些限制未包含在其开关中(例如--max-depth=
其他工具所具有的)。我喜欢维护通用标准(因此ls
并ll
遵循大多数普通发行版所具有的标准),但我的其他别名遵循某种易于记住的语法(lls
“长列表、安全性”等)。我可以将其分成几个不同的问题,但由于这一切都与寻找通用操作方法的尝试有关ls
,因此列出我的工作清单来描述我正在谈论的内容感觉更合适,因为它们都是相关的。一些具体问题:
我经常听到有人说你永远不应该ls
在for
循环等中使用。这在默认情况下如何查看子目录等方面是有意义的ls
,但是有没有一种简单的方法可以剪辑ls
以从不查看子目录内部?我--max-depth=
在man
页面中没有看到任何类似的内容,但在我看来,如果我们剪辑ls
不进入子目录,那么在循环或其他结构中使用应该是可靠的for
。是否有一种可靠的方法来剪辑ls
为仅一个目录的输出,然后在 for 循环中使用它?
我使用了我认为相当笨重的结构lld
(带有目录的长列表)和llf
(带有文件的长列表)。有没有更好的方式来表达“我只想查看文件”?或“我只想查看目录?”;再次, man
页面中我看不到任何内容。特别是,我只能以-l
格式进行此列表,否则我无法 grep 出我不想显示的项目。一般来说,我认为以这种方式使用 grep 可能是一个坏主意(因为锁定-l
格式),那么有没有更好的方法来实现仅选择目录项或仅选择文件,而不是使用 grep ?
如果下面的任何其他方法格式错误,我希望知道更好的方法?
尝试拥有一组标准的ls
输出(每个发行版的设置通常不同)。
字符[]
集通配符。例如ls name[03][17].c
, 将匹配name01.c
, name07.c
, name31.c
, name37.c
, 并且[]
还允许范围:ls name[07][1-9].c
请注意使用\ls
来运行裸命令,忽略别名。
命令是什么:
ls | wc -l
Run Code Online (Sandbox Code Playgroud)
做?我知道
wc <filename>
Run Code Online (Sandbox Code Playgroud)
给出行、词和字符,以及
wc -l <filename>
Run Code Online (Sandbox Code Playgroud)
打印行数。但是它如何与 ls` 一起使用尚不清楚。它有什么作用?