如何在find和bash -c中传递变量?

时间:2010-11-30 15:13:44

标签: bash

嘿伙计们,我遇到了将变量传递给%exe部分代码的问题。需要你的帮助。

这是我在bash脚本中使用的工作代码:

## Function
targz() {
  find $1 -type f -name "*.$2" -exec \
    bash -c 'old=$(basename {}); new=${old/%exe/tar\.gz}; \
      tar -zcvf $new $old; ' \;
}

## Function Call
## targz [directory] [extension]
targz . 'exe';

是的我尝试过这样的事情:

new=${old/%$2/tar\.gz};

但它生成的文件名如:file.exetar.gz

2 个答案:

答案 0 :(得分:5)

尝试:

targz() {
  find $1 -type f -name "*.$2" -exec \
    bash -c 'old=$(basename {}); new=${old/'"$2"'/tar\.gz}; \
      tar -zcvf $new $old; ' \;
}

诀窍是退出单引号,以便执行变量扩展。

答案 1 :(得分:4)

使用envbash设置环境变量:

targz() {
  find "$1" -type f -name "*.$2" -exec \
    env ext="$2" bash -c 'old=$(basename "{}"); new=${old/%$ext/tar\.gz}; \
      tar -zcvf "$new" "$old"; ' \;
}

我添加了一些引用来防止文件名中的空格。

相关问题