0

我在 Linux (Ubuntu 11.10) 机器上;再次伯恩斯。

我必须使用 python 脚本处理一个充满文件的目录。我的同事编写了 python 脚本,我之前已经成功地一次在一个文件上使用过它。它有两个参数:要处理的文件的路径用引号括起来,以及一个称为次要参数-min,它需要一个整数。此外,脚本写入标准输出。

根据我的 shell 脚本编写经验以及在此论坛上关注其他人的经验,我使用以下方法遍历文件目录:

for f in path/to/data_directory/*; do
  path/to/pythonscript.py $f -min 1 > path/to/out_directory/$f;
done

我在out_directory. 每一个的内容都是只有python脚本才能写的。也就是说,上面的 for 循环成功地将文件传递给脚本。但是,每个文件内容的性质是完全错误的(因为脚本所做的计算是错误的)。当我在 中的一个文件上运行 python 脚本时data_directory,输出文件具有正确的内容(脚本执行的计算是正确的)。

使它更复杂的是,相同的 shell 方法(for循环)在我同事的 Mac OS X 中完美运行。

问题出在哪里?我错过了一些关于 Linux shell 的非常基本的东西吗?也许这是一个语法错误?

任何帮助将不胜感激。

更新:我只是再次运行了 for 循环,但我没有将它指向文件的 data_directory,而是将它指向 data_directory 中的一个文件。我遇到了同样的问题 - python 脚本没有计算出正确的结果。

4

2 回答 2

1

我看到的唯一问题是文件名可能包含空格 - 所以你应该引用文件名:

for f in path/to/data_directory/*; do
  path/to/pythonscript.py "$f" -min 1 > "path/to/out_directory/$f"
done
于 2012-08-13T04:20:25.823 回答
0

好吧,我不知道这是否有帮助。

path/to/pythonscript.py $f -min > path/to/out_director/$f

替换为

path/to/pythongscript.py path/to/data_directory/myfile -min 1 > path/out_directory/path/to/data_directory/myfile

脚本应该是

cd path/to/data_directory
for f in *; do
path/to/pythonscript.py $f -min 1 >  path/to/out_directory/$f
done

您正在运行哪个版本的 bash?

如果你运行这个脚本你会得到什么?

cd path/to/data_directory
for f in *; do
echo $f > /tmp/$f
done

当然,这应该会给你一堆包含它们自己的文件名的文件。

于 2012-08-13T04:44:41.023 回答