如何将*与目录中的隐藏文件进行匹配


21

如何匹配给定目录内的隐藏文件

例如

如果我给出以下命令,则不是给出隐藏文件的结果,

 du -b maybehere*/*

如何使用一个命令而不是使用一个简单的命令来实现

du -b maybehere*/.* maybehere*/*

因为我需要在这里键入两次。


尝试隐藏maybehere*/.*所有内容
并附

1
您的编辑提出了一个带有附加限制的新问题,这使Q成为可移动的目标,有可能使已经给出的答案无效。那是不礼貌的举止,请问一个新问题。
Anthon

Answers:


22

利用括号扩展:

du -b maybehere*/{*,.[^.],.??*}

或者

du -b maybehere*/{,.[^.],..?}*

其背后的逻辑可能并不明显,所以这里是解释:

  • * 匹配所有非隐藏文件
  • .[^.]匹配名称以单点开头而不是非点的文件;第一种形式只有2个字符的文件名。
  • .??* 匹配至少3个字符长的隐藏文件
  • ..?* 像上面一样,但是第二个字符必须是一个点

整个要点是排除指向当前目录和父目录(...)的硬链接,但要包括所有普通文件,以使每个普通文件仅被计数一次!

例如最简单的就是写

du -b maybehere*/{.,}*

这意味着,该列表包含一个点.和“无”(没有什么是之间,和关闭}),因此所有隐藏文件(从一个点开始),所有非隐藏文件(从“一无所有”开始)将匹配。问题在于这也将与.和匹配..,并且这很可能不是您想要的,因此我们必须以某种方式将其排除。


关于支架扩张的最终决定。

括号扩展是一种机制,您可以通过编写更少的字符来在命令行中包含更多文件/字符串/任何内容。语法为{word1,word2,...},即它是一个以逗号分隔的字符串的列表,它们以{和开头}bash手册给出了一个非常基本的,同时又非常普遍的用法示例:

$ echo a{b,c,d}e
abe ace ade

有什么用的{ },我不知道:(你能不能给我一个方向,以获得更多的信息关于它
vidhan

@vidhan看到编辑,并查看man bash“支撑扩展”一章。
jimmij 2015年

您介意为我提供以上解释的更多信息吗?请更清楚地解释每件事的工作原理,因为我是这些事物的新手@jimmij
vidhan 2015年

6
.??*不匹配.a.b... .[^.]*不匹配..foo
斯特凡Chazelas

4
.foo同时匹配.[^.]*.??*。你要{.[!.],..?,}*
斯特凡Chazelas

14

由于您已经在使用GNU特定语法(-b):

du -abd1 maybehere*/

这样,它du就是列出目录中的文件maybehere*(并且不排除点文件)。-d1将磁盘使用情况的报告限制为向下一级(包括带有的非目录-a)。

否则,为了使glob包含隐藏文件(.和除外..),每个外壳程序都有自己的语法:

  • zsh

    du -b maybehere*/*(D)
  • ksh93

    (FIGNORE='@(.|..)'; du -b maybehere*/*)
  • bash

    (shopt -s dotglob; du -b maybehere*/*)
  • tcsh

    (set globdot; du -b maybehere*/*)
  • yash

    (set -o dot-glob; du -b maybehere*/*)

    尽管要提防它包括在包含它们的系统上,.并且..在包含它们的系统上readdir() 使它几乎不可用。


8

另一个选项在这里可用:

du -sm .[!.]* *

为什么要跳过以开头的文件名..
库萨兰达

2
大概是因为他们不想列出../下面的所有内容。
Shadur

这不算文件,例如..myfile; 加..?*了点。但+1表示否定匹配使用正确的glob语法。
Pedro Gimeno

0

如果您只想列出隐藏目录或对隐藏目录进行操作,则可以像Costas所说的那样使用

du -b maybehere*/.*

这将允许您对隐藏的文件和目录进行操作。如果只需要隐藏目录,则可以使用

du -b maybehere*/.*/


您能再请问一下问题吗?@SailorCire我已对其进行了一些编辑
vidhan

@vidhan,所以您只想在一个目录中隐藏工作?那是对的吗?
SailorCire

否,我想同时在一个目录中匹配隐藏文件和非隐藏文件,而不是同时使用du maybehere*/.*maybehere*/*hidden以及非隐藏文件
vidhan 15/02/22

@vidhan du -b选择隐藏和非隐藏。
SailorCire

否:(不幸的是@SailorCire
vidhan

0

虽然不直接使用shell,但是您可以像这样使用深度有限的find

find maybehere -maxdepth 1 -exec du -sh {} \;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.