🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 练习 6:`find` > 原文:[Exercise 6: find](https://learncodethehardway.org/more-python-book/ex6.html) > 译者:[飞龙](https://github.com/wizardforcel) > 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) > 自豪地采用[谷歌翻译](https://translate.google.cn/) 希望你正在发现阻碍自己的各种方式,甚至在你开始工作之前。也许这不是戏剧性的,但你至少应该确定你在环境中可以改善的东西,它们使你难以开始工作。这些小练习是你专注于开始的一个好方法,因为它们不是那么重要,并且能够放进一个适合你分析的时间尺度。如果这些项目有几个小时那么长,当你复查你做了什么,并做出改进的时候,你会觉得无聊,短暂的45分钟的项目,是你可以记录和非常快速审查的东西。 这是我在学习中使用的一种模式。我会识别我需要改进的东西,例如我如何开始,或者我如何使用一个工具。然后我会设计一个练习来关注它。当我正在学习画画时,我外出并努力画树。我坐下来看着问题,我发现的第一件事就是我拖住了太多的东西。我也把我所有的东西都放在我公寓附近的随机的地方。我为我的绘画用品购买了一个特定的包,并保持这个包是准备好的。当我想在外面画画时,我拿起这个包,走到几个地方之一,而不是精心规划到哪里绘画。我练习拿起我的包,走到两个地方之一,准备好,画一幅画,然后回家,直到我像丝绸一样平滑。之后我看了 Bob Ross 的作品,弄清如何画树,因为这个家伙可以很快画出来很多树。 这是你应该做的。很多人在他们的工作领域浪费时间和精力。你是否有一个专门的工作场所,永远不会改变吗?我放弃了我的笔记本电脑,现在只需要使用台式机,这样我就可以在一致的地方做我的工作。这也让我的背部和颈部不用拖着这块金属,给了我更大的工作屏幕,都提高了我的工作能力。在这个练习中,我希望你专注于你的工作领域,并确保在开始之前准备好: + 你有足够的光线吗?你需要更少的光线吗? + 你的椅子怎么样?你需要一个更好的键盘吗? + 还有什么其他工具妨碍你了?你在 Windows 机器上尝试执行 Unix 的东西吗?试图在 Linux 上做 Mac 的东西?不要去买一台新电脑,但是如果你发现你想要做的事情太多,那么请考虑花一笔大的开销。 + 你的桌子怎么样?你有没有一个?你整天都在咖啡馆使用可怕的椅子和咖啡吗? + 音乐怎么样?你听带歌词的音乐吗?我发现如果我听音乐没有歌词,我更容易专注于我的头脑中的声音,帮助我写作或编程。 + 你在开放式办公室工作,你的同事烦人吗?去买一双盖过耳朵的大耳机。当你戴着它们时,很明显你没有投入注意力,所以人们会离开你,比起你插上耳机而他们看不见,这样他们会觉得更温和一些。这也会阻止分心,并帮助你集中精力。 用这个练习来思考这样的主题,并试图简化和改善你的环境。有一件事 - 不要花很多钱买奇奇怪怪的工具。只需确定问题,然后尝试找到解决方法。 ## 挑战练习 在这个挑战中,你要实现用于查找文件的`find`工具的基本版本。像这样运行`find`: ``` find . -name "*.txt" -print ``` 这将搜索当前目录中以`.txt`结尾的每个文件,并将其打印出来。 `find`的命令行参数数量很多,所以你不应该在45分钟内实现它们。`find`的一般格式是: + 开始搜索的目录:`.`或`/usr/local/`。 + 一个过滤器参数,如`-name`或`-type d`(目录类型的文件)。 + 对每个找到的文件执行的操作:`-print`。 你可以执行有用的操作,例如在每个找到的文件上执行命令。如果要删除主目录中的每个Ruby文件,可以执行以下操作: ``` find . -name "*.rb" -exec rm {} \; ``` 请不要运行它,除非意识到它会删除所有以`.rb`结尾的文件。`-exec`参数需要一个命令,将`{}`的任何实例替换为文件的名称,然后碰到`;`(分号)时停止读取命令。在前面的命令中我们使用`\;`,因为 bash 和许多其他 shell 使用`;`(分号)作为他们的语言的一部分,所以我们必须转义它。 这个练习将真正测试你使用`argparse`或`sys.argv`的能力。我建议你运行`man`找到参数列表,然后尝试使用`find`来确定你将要实现什么参数。你只有45分钟,所以你可能不会实现太多,但是`-name`和`-type`,以及`-print`和`-exec`是必不可少的。`-exec`参数将是一个挑战,所以将它保存到最后。 当你实现它的时候,尝试找到可以为你做的工作的库。你一定要查看`subprocess`模块和`glob`模块。同时要更仔细地查看`os`模块。 ## 研究性学习 + 你实现了多少`find`的功能? + 你发现用于改进这个实现的库是什么? + 你将库的查找计算在45分钟内了吗?你可以说,开始 Hack 之前的研究并不算在内,这样做完全没有问题。如果你想要额外的挑战,那么就将你的研究包括在45分钟内。 ## 深入学习 你可以在 45 分钟的 Hack 内实现多少`find`的功能?也许把它作为下一个星期的黑客热身挑战,来看看你能做些什么。记住,你应该试图拼凑出最好的、最丑陋的黑魔法。别担心,我不会告诉那些敏捷的人,你只是玩玩而已。