我想用xonsh来压缩目录中的几个文件.我首先尝试以下方法:
$ ls
table_aa.csv table_amgn.csv table_csco.csv table_esrx.csv table_hal.csv table_jbl.csv table_pcg.csv table_zmh.csv
table_aapl.csv table_amzn.csv table_d.csv table_gas.csv table_hp.csv table_jpm.csv table_usb.csv
$ for fn in ls:
.. bzip2 fn
..
NameError: name 'ls' is not defined
Run Code Online (Sandbox Code Playgroud)
好的,所以我$()明确使用
$ for fn in $(ls).split():
. bzip2 fn
bzip2: Can't open input file fn: No such file or directory.
bzip2: Can't open input file fn: No such file or directory.
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
$ xonsh --version
('xonsh/0.3.4',)
Run Code Online (Sandbox Code Playgroud)
你非常接近第二个例子.唯一需要注意的是,它fn是一个Python变量名,因此您必须使用@()它将其传递给子进程:
$ for fn in $(ls).split():
. bzip2 @(fn)
另外,在v0.3.4上,你可以用regex globbing而不是ls,
$ for fn in `.*`:
. bzip2 @(fn)
至少在master上,您现在可以逐行遍历!(),这意味着如果您与ls结合,以下内容也会起作用:
$ for fn in !(ls):
. bzip2 @(fn)