Bash运行命令用cd到每个目录

时间:2014-08-29 03:17:11

标签: python bash shell ipython

我有命令我无法指定输出目的地,因此输出文件保存在运行bash脚本的目录中。

find | xargs ipython nbconvert 

这会将每个子目录中的所有已转换文件保存到运行该命令的目录中。我想将转换后的文件输出到每个文件的当前目录中。

那么如何指定没有输出目录选项的命令的目的地?

我想运行像

这样的东西
 find | convert . 

这样每个文件都会保存在其目录中。

1 个答案:

答案 0 :(得分:2)

无论如何,

find | xargs是一个坏主意,因为带有空格或其他异常字符的文件名可能会混淆问题。幸运的是,find带有一个名为-execdir的标志,它几乎完全符合您的要求。

find -execdir ipython nbconvert {} \;

详细了解find manpage


正如@chepner在评论中指出的那样,并非find的所有版本都支持-execdir功能。对于那些不熟悉的人,您可以利用输出在各行上的事实,并创建一个while循环来迭代每个结果,在运行程序之前应用cd

find | while read line; do
  cd "$(dirname "$line")"
  ipython nbconvert "$line"
done

你也可以在python本身中实现这一点,如果你喜欢它总是在第一个参数的目录中运行。如果您使用sys.argv而不是更高级的选项解析器之一,则可以在python脚本的开头添加类似这样的内容:

if __name__ == '__main__':
    import os
    import os.path
    import sys
    os.chdir(os.path.dirname(sys.argv[1]))

您还可以在open时为输出文件指定显式路径,例如

with open(os.path.join(os.path.dirname(sys.argv[1]), 'name_of_output_file.txt') as fb:
    pass # your code here