如何以递归方式调用linux shell上的命令

时间:2013-09-17 13:37:42

标签: linux bash

我想在所有子文件夹

的每个文件上运行一个命令(pycdc)
#!/bin/sh
uncompyle () {
pycdc "$1" >"$1"_dec
}
export -f uncompyle

find . -type f -name '*.pyc' -exec bash -c 'uncompyle "$0"' {} \;

但是我得到了错误:

Bad MAGIC!
Could not load file ./file/my.pyc

正确的代码怎么样?

3 个答案:

答案 0 :(得分:3)

这里不需要功能。尝试:

find . -name "*.pyc" -exec sh -c "pycdc {} > {}_dec" \;

答案 1 :(得分:1)

如果您使用流程替换并在循环上运行它会更安全,因为您的函数不会通过find导出。

while read -r F; do
    uncompyle "$F"
done < <(exec find . -type f -name '*.pyc')

答案 2 :(得分:0)

试试这个:

find . -path '*.pyc' -exec bash -c pycdc "$0" >"$0"_dec {} \;