对隐藏文件执行命令

对隐藏文件执行命令

我运行命令在所有文件中搜索短语:

cat *.* | grep blabla

它运行正常,但我遇到了隐藏文件和目录的问题。命令根本无法处理它们。如何解决这个问题?

答案1

默认情况下,隐藏文件(即以句点开头的文件)被排除在 bash shell 的 glob 扩展之外。但是,您可以使用设置来更改这一点,dotglob例如

$ mkdir dir
$ touch dir/.hidden dir/visible

$ echo dir/*
dir/visible

$ shopt -s dotglob
$ echo dir/*
dir/.hidden dir/visible

之后你可以使用以下命令取消设置选项shopt -u dotglob

答案2

使用find带有逻辑或标志 ( -o) 和-exec . . .\+标志的命令

 find . -maxdepth 1 \( -iname "*.*" -o -iname ".*"   \) -exec grep "MySearchTerm" {} \+ 

解释:

  • find是一个递归命令,用于在指定目录中搜​​索文件。在本例中,它是.当前工作目录。
  • -maxdepth标志告诉我们只停留在当前目录中。如果你想要递归或指定要下降的子目录数,请更改1为你想去的级别数。
  • \( . . .\)部分阻止 shell 将其视为子 shell,而是将其视为参数分组find
  • -iname标志允许指定要搜索的文件名。
  • -o标志将告诉 find 搜索文件*.*或以前导点开头的文件,即隐藏文件。
  • -exec . . .{}结构允许运行特定命令来对找到的文件进行操作。\+将告诉find将所有文件作为要运行的命令的参数,在本例中是grep

这是一个小例子,您可以看到SEARCHFILE.txt.SEARCHFILE.txt都位于:

DIR:/xieerqi
skolodya@ubuntu:$ find . -maxdepth 1 \( -iname "*.*" -o -iname ".*"   \) -exec grep "HelloWorld" {} \+ 2>/dev/null           
./SEARCHFILE.txt:HelloWorld ! I'm found
./localDir.txt:HelloWorld.so
./localDir.txt:HelloWorld.c
Binary file ./2015-05-05-raspbian-wheezy.img matches
./.SEARCHFILE.txt:HelloWorld ! I'm found

答案3

“隐藏文件”就是名称以点开头的文件。在 GUI 应用程序中,这些文件通常不显示,因此得名。

您可以使用shell 通配符

cat {*,.*} | grep blabla

上述命令包括所有没有点 ( *) 的文件和所有以点 ( .*) 开头的文件。

顺便说一下,这是一个猫的无用用途,而你应该将命令写为:

grep blabla {*,.*} 

相关内容