我的任务要求我创建一个可以采用这些参数的 find 版本:
-name(名称的处理模式)-type(f 和 d)-print-exec(并且能够处理 {},尽管如果存在 exec,您可以假设它将始终是最后一个论点,不需要以分号结束。它还声明“谓词可以按任何顺序出现,并且隐式短路 AND 在一起。不要处理 -o (OR)。”我也不允许在我的脚本中使用 find。
因此,示例输入如下所示:
myfind ~/dirtocheck/ -name '*.o' -type f -print -exec /bin/mv {} ~/.TRASH\;
我有几个关于如何完成所有这些的问题。
首先,我想知道如何使用递归来沿着路径导航。这是我的函数的伪代码版本:
recurse_path () {
for i in "$@"; do
# call a function that executes rest of program
if [[ -d "${i}" ]]; then
cd "${i}"
recurse_path $(ls ".")
fi
done
}
其次,我不知道将传入多少参数,也不知道如何正确解析它们。在执行任何可以使这更容易的事情之前,我应该做些什么吗?
例如,我假设如果我们有一个 '-exec' 参数,我可以接受任何超过它的内容,并将它移动到一个数组中以供执行。但我该怎么做呢?
最后,“谓词可以以任何顺序出现并且隐式短路 AND 在一起”是什么意思。我假设这意味着每件事情都必须为真才能执行下一件事情,但我不知道为什么它们会乱序?
我将不胜感激任何帮助,甚至是关于如何构建它以使其工作的想法。
最佳答案
First of all, I was wondering how to use recursion to navigate down the path.
您的代码是一个好的开始。表现得像find , 我会删除对 cd 的调用而是始终使用相对于起始目录的路径。这意味着递归进行得越深,它们就会变得越长。
还有 recurse_path $(ls ".") recurse_path * 的写法很复杂.
Second, I don't know how many arguments will be passed in or really how to parse them correctly.
作为提示,您可以编写一个循环来检查 $1每次迭代,然后使用 shift在处理参数后删除参数,所以 $1指向下一组参数。例如,如果 $1是-name , 处理 $2 中的名称然后调用shift 2 .
For example, I'm assuming if we have a '-exec' argument, I can take anything past that, and move it into an array for execution. But how would I do this?
如果您使用过 shift基于方法然后是 -exec 的参数自然可以简单地访问为 "$@" .
Finally, what does it mean by "Predicates can come in any order and are implicitly short circuit ANDed together." I'm assuming this means that each thing must be true for the next one to execute, but I don't know why they would be out of order?
你不能假设 -name在 -type 之前.它们可以按任意顺序排列,也可以丢失,甚至重复多次。例如:
myfind ~/dirtocheck/ -name '*.o' -type f
myfind ~/dirtocheck/ -type f -name '*.o'
myfind ~/dirtocheck/ -name 'MyClass*' -name '*.java'
关于linux - 在 bash 脚本中实现一个简单版本的查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28711063/
我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?