在find的exec参数中展开bash函数
如何使find在其exec参数中应用我的
shell定义的函数和别名?
例如,我已经定义了一个类似于bzip2但使用7z的函数:
当我找到超过7天的文件进行压缩时: find . -mtime +7 -name "G*.html" -execdir 7zip {} + 而不是扩展7zip它错误命令未找到. 这都在shell脚本中. 解决方法
所有这四个命令都可以正常使用函数调用.根据需要调整您的查找规范..它们都满足文件名中的空格.就个人而言,我无法看到炮击另一个bash实例,但我已经包含了两个调用bash的版本.
IFS=$'n'; f=($(find /tmp -maxdepth 1 -name "$USER.*")); f7zipi "${f[@]}" IFS=; find /tmp -maxdepth 1 -name "$USER.*" | while read -r f ;do f7zipi "$f"; done IFS=$'n'; bash -c 'IFS=; f7zipi "$@"' 0 $(find /tmp -maxdepth 1 -name "$USER.*") find /tmp -maxdepth 1 -name "$USER.*" -exec bash -c 'IFS=; f7zipi "$@"' 0 {} +; 接下来是我如何在Ubuntu 10.04中使用GNU bash 4.1.5设置该功能 BTW.您应该在函数中使用本地f,以便它不会与调用脚本的同名变量冲突. 这正是我添加到?/ .bashrc中的内容 function f7zipi() { local f for f in $@; do ls -alF "$f" 7za a -si -t7z -m0=lzma -mx=9 -mfb=64 -md=64m -ms=on "$f.7z" < "$f" && touch -r "$f" "$f.7z" && rm -fv "$f" && ls -alF "$f.7z" done } export -f f7zipi 当我只将上述函数分配到终端的bash命令行时,从该命令行运行的脚本在调用函数时失败…如果我进一步将export -f f7zipi应用到同一命令行..那么脚本会成功. ..但是,scipt仅适用于该特定命令行会话. 当函数和导出包含在?/ bashrc中时,脚本每次都在任何bash会话中工作. 这是测试脚本 #!/bin/bash f=/tmp/$USER.abc g=/tmp/$USER.lmn rm -fv "$f" "$f".7z rm -fv "$g" "$g".7z printf 'abcdefg'>"$f" printf 'lmnopqr'>"$g" IFS=$'n'; f=($(find /tmp -maxdepth 1 -name "$USER.*")); f7zipi "${f[@]}" exit (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |