Linux查找命令不必要的数据



我正在尝试编写简单的bash脚本,而我陷入了find命令。

当我键入find . zad*时,我将获得如下输出:

.
./lab2.sh~
./#zad2.sh#
./zad2.sh~
./zad1a.sh
./zad2.sh
./lab2.sh
./Azad2.sh~
./cdlinux.ftp.log
./Azad2.sh
./zad1a.sh~
./zad1.sh
./cdlinux.www.log
./zad1.sh~
zad1a.sh
zad1a.sh~
zad1.sh
zad1.sh~
zad2.sh
zad2.sh~

为什么它在我的文件夹中列出所有文件(在文件名之前使用./),之后我得到了正确的查找结果。有什么方法可以删除该./输出?在所有情况下,使用SED命令都无法使用(搜索路径与.不同)。

您必须使用 -name标志来指定要搜索的名称,并将模式包装在引号中,以便bash在传递给 find之前不会在通配符*上执行自动扩展:

 find . -name "zad*"

另外,您无需使用.

指定CWD路径

使用:

 find -name "zad*"

应该正常工作=)

首先,要按名称搜索文件,您需要使用-name选项。其次,您需要在引号中包含图案。

诸如*工作之类的球形模式的方式是,在称为命令之前,BASH将扩展模式。因此,查找将得到所有与模式匹配的文件。没有引号,就好像您键入了诸如find . -name zad1.sh zad2.sh zad3.sh ...之类的命令(取决于当前目录中的文件与您的模式匹配的文件)

为了防止这种情况,将您的模式包含在单引号中。这导致字面字符串zad*作为参数传递给查找命令,从而使Zad可以将模式与所找到的每个文件进行比较。

例如:

find . -name 'zad*'

相关内容

最新更新