是否有内联bash脚本这样的事情?
我想要做的东西线:是否有内联bash脚本这样的事情?
find -name *.mk | xargs "for i in [email protected] do mv i i.aside end"
我认识到,有可能比在此错误的更多,但我想具体了解这种内嵌命令定义的,我可以将xargs传递给。
没有必要在这里xargs的
find -name *.mk -exec mv {} {}.aside \;
问:“我该如何做X?”。答:“你不需要做X” –
我不知道你的for循环的语义应该是什么样的,但一味地编码它会给这样的:
find -name *.mk | while read file
do
for i in $file; do mv $i $i.aside; done
done
如果身体在多个地方使用,您还可以使用bash功能。
在某些版本找到一个论点需要。当前目录
星*必须进行转义
你可以用echo命令尽量肯定会做什么命令
find . -name '*.mk' -print0 | xargs -0i sh -c "echo mv '{}' '{}.aside'"
man xargs
/-i
man sh
/-c
我敢肯定,你可以在一个不错的方式做到这一点,但因为你要求xargs的:
find -name "*.tk" | xargs -I% mv % %.aside
循环执行的文件名是没有意义的,因为你只能重新命名一次一个。使用内联uglyness是没有必要的,但我不能使它与管道,要么eval
或bash -c
工作。
这个特殊的命令是不是一个很好的例子,但您可以通过给sh -c 'here is the script'
作为一个命令使用“内联shell脚本”。你可以给它的参数,这将是$ @里面的脚本,但有一个问题:第一个参数here is the script
去$ 0脚本中之后,所以你必须把附加字有,否则你会失去的第一个参数。
find . -name '*.mk' -exec sh -c 'for i; do mv "$i" "$i.aside"; done' fnord '{}' +
另一个有趣的功能,我趁着还有一个事实,即循环遍历命令行参数默认为:for i; do ...
相当于for i in "[email protected]"; do ...
我重申,上面的命令是令人费解和慢相比,到许多其他做批量MV的方法。我发布它只是为了显示一些很酷的语法。
所以你要简单地重命名所有的* .mk文件或其他什么东西? – lynxlynxlynx
你是什么操作系统?至少Linux知道'rename'命令,查看http://linux.die.net/man/1/rename –
你应该记住'find'和'xargs'确实与bash无关,它们是独立的程式。他们不知道(或关心)bash命令。 – cdarke