我有命令我无法指定输出目的地,因此输出文件保存在运行bash脚本的目录中。
find | xargs ipython nbconvert
这会将每个子目录中的所有已转换文件保存到运行该命令的目录中。我想将转换后的文件输出到每个文件的当前目录中。
那么如何指定没有输出目录选项的命令的目的地?
我想运行像
这样的东西 find | convert .
这样每个文件都会保存在其目录中。
答案 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