1

我正在尝试编写简单的 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 命令并非在所有情况下都有效(当搜索路径不同于 时.)。

4

2 回答 2

6

您必须使用flag 指定要搜索的名称,并将模式括在引号中,因此 bash 在通配符传递给之前-name不会对其执行自动扩展:*find

 find . -name "zad*"

此外,您不需要指定 cwd 路径.

使用:

 find -name "zad*"

应该可以正常工作=)

于 2012-10-27T14:26:01.573 回答
2

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

glob 模式的*工作方式是 bash 会在你的命令被调用之前扩展模式。因此,find 将获得所有匹配该模式的文件。没有引号,就好像您键入了一个命令find . -name zad1.sh zad2.sh zad3.sh ...(取决于当前目录中与您的模式匹配的文件)

为防止这种情况,请将您的模式包含在单引号中。这会导致将文字字符串zad*作为参数传递给 find 命令,从而允许 zad 将模式与其找到的每个文件进行比较。

例如:

find . -name 'zad*'
于 2012-10-27T14:30:02.440 回答