【发布时间】:2018-11-01 19:05:10
【问题描述】:
我正在寻找一种方法来递归地获取 UNIX 中给定目录中所有文件的路径。 (不使用查找)
示例:
给定一棵这样的树
lab_assignment:
file1.txt
file2.txt
subdir1
subdir2
./subdir1:
file11.txt
./subdir2:
file21.txt
我需要一个命令,它可以递归地列出 lab_assignment 中包含的所有文件的路径。
./file1.txt
./file2.txt
./subdir1/file11.txt
./subdir2/file21.txt
我在作业中发现了这一点,因此故意限制了工具集。我知道你可以使用find 命令轻松完成,但是这个任务不允许使用find,所以必须有一种方法可以在没有find 的情况下完成它,但我不能来最多一个。
老师告诉我们,只使用ls、引号,也许还有管道和grep,就可以实现这一点。
更新:
我在最近的一项任务中遇到了这个问题,尽管它不是主要关注点。正因为如此,我设法完全避免了这个问题,但后来发现自己很好奇什么是正确的解决方案。
此问题的解决方案用于以下任务:
递归输出文件的内容,其名称以 .txt 结尾
递归计算所有文件的行数文件名以f开头的文件
实用程序 like cat 和 wc 使用其标准输入中提供的文件名,并且没有内置递归功能,因此您必须提供文件路径列表。
丑陋的方式
我决定尽可能避免这个问题并这样做:
cat *.txt */*.txt */*/*.txt
wc -l f* */f* */*/f*`
这行得通。老师似乎很不高兴,说这种方法乱七八糟,但他还是接受了我的报告。我很好奇我应该如何做到这一点。
破碎之路
在烦了老师一个多月后,他同意向我展示一个正确的方法。
他输入了这个:
cat `ls -R $PWD`
这似乎只会导致错误,并没有产生任何类似于所需结果的东西。
然后他想出了:
cat $PWD/`ls -R`
这件事至少做了一些事情,但仍然 - 甚至没有接近所需的结果。
然后老师告诉我,这是他第一年教这门课程,这是很久以前由大学不同部门设计的,他作为一个 UNIX 用户,只需使用find 和 他不知道解决方案
但他发誓一定是在课程设计文档中的某个地方看到过它,或者某个地方……
那么,有没有办法在不查找的情况下获得文件路径的递归列表? 哪一个聪明的 UNIX 技巧和头脑体操是这方面的关键?
【问题讨论】:
-
事情是这样的,所以不是“请为我做我的家庭作业”类型的服务。
-
哦,我不是要我做作业!那将是多么奇特的小作业啊!我要求解决一个简单的技术问题,我缺乏专业知识来回答自己。我想知道更多,就是这样。
-
如果作业不允许您使用
find,那么问题的解决方案如何不是作业的一部分? -
只是为了明确一点,如果这很重要,我已经完成了任务。我已经把它交给了,以相当愚蠢的方式避免了这个问题。我在 SO 上问过这个问题,因为我真的对如何以正确的方式做到这一点很感兴趣。该解决方案可能会使用一些我错过或误解的概念。归根结底,我只是想更好地了解 UNIX。这是提出问题的不当理由吗?
-
请将您的老师推荐给mywiki.wooledge.org/ParsingLs。