在某些代码中,我找到了如下命令:
ls | grep Directory 1.txt
但上面不适合我 任何人都可以建议适当的命令吗?
答案 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
命令获得该功能。