使用filename获取目录名的shell命令是什么?

时间:2014-02-24 05:51:02

标签: shell unix solaris

在某些代码中,我找到了如下命令:

ls | grep Directory 1.txt

但上面不适合我 任何人都可以建议适当的命令吗?

3 个答案:

答案 0 :(得分:1)

您要查找的命令是find。它将遍历任意复杂的目录结构,并报告所有符合您指定条件的文件。

find . -name 1.txt -exec dirname {} \;

这会在每个匹配的文件上运行dirname命令,该命令只打印目录名称。

如果你只想深入一个目录,GNU find-maxdepth选项,或者你可以使用shell的通配符匹配工具。

dirname */1.txt

这假定文件直接存在于当前目录的子目录中,并且只有在只有一个通配符匹配时才会起作用(dirname一次仅适用于一个文件)并且各种变通办法不是比使用find更优雅。

另一方面,如果您知道当前目录中存在1.txt,则命令pwd将打印出目录名称。

命令grep Directory 1.txt将打开当前目录中的文件1.txt,并打印出与文本Directory匹配的所有行。它只会忽略您从ls命令提供的标准输入,这也是一样,因为ls不会在任何有用的地方打印“目录”。另外,parsing ls output非常复杂,所以你应该避免尝试。

答案 1 :(得分:0)

Ubuntu forums开始,您可以使用

dirname `find . -name someFile.txt`

可替换地,

dirname /some/path/to/a/file.txt

或者你可以剥掉grep返回路径的最后一位

$ F='~/Documents/file.txt'
$ echo $(dirname "$F")
~/Documents
$ echo ${F%/*}
~/Documents

答案 2 :(得分:0)

给出(仅)一个像1.txt这样的任意相对路径名,获取目录名是不可能

为什么呢?因为在不同的目录中可能有很多1.txt个文件!并且(大概)你无法知道哪一个是正确的。

如果您有办法消除潜在的多个答案的歧义,那么您可以使用find命令搜索该文件,并将dirname应用于生成的路径名。请参阅相应的手册条目等。 (但要注意find通常会搜索大量目录,这可能会很贵。“

如果您知道1.txt位于“当前目录”中,那么您实际要求的是当前目录的路径名。您可以使用pwd命令获得该功能。