我想创建一个需要3个参数的命令(要搜索的目录,要匹配的模式,然后文件创建数据写入的位置),但我有点卡住,因为我无法弄清楚如何获得索引节点来显示这些搜索结果以及要写入文件中。它应该是这样的:
for i in "directory" if name = "pattern", inodes > "file"
似乎应该很简单,但我似乎不明白?以下是我目前为止得到的,但是它没有显示索引节点(ls -i倾向于显示所有子目录,而不管模式匹配),并且说我的第三个参数太模糊了…
#!/bin/bash
find "$1" -name "*$2*" > "$3"
我想知道我是否应该使用像ls /$directory -i
这样的东西,但我觉得语法不起作用。
你很接近了。你已经完成了搜索部分。缺少的部分是如何在匹配的文件上执行ls -i
。要做到这一点,使用-exec <command>
,如下所示:
find "$1" -name "*$2*" -exec ls -i {} + > "$3"
这里的一般语法是-exec <command> +
,它对所有匹配的文件执行命令。
- 命令末尾的
{}
花括号是占位符。它们告诉-exec
在命令行中替换匹配文件的名称。 +
是-exec
动作结束的标志。每个-exec
动作必须以+
或';'
结束。+
表示将所有文件传递给命令的单个调用;';'
表示"多次调用命令,每个文件一次"。- 如果你使用
+
,那么花括号必须在最后。文件名都是连接到命令的。有了';'
,{}
可以在任何地方,而不仅仅是结尾。
您可能还想使用ls -id
。默认情况下,ls
将列出目录的内容。-d
标志告诉它列出目录本身,而不是目录内的内容。