使用xonsh使用ls循环文件

MRo*_*lin 4 xonsh

我想用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)

Ant*_*atz 8

你非常接近第二个例子.唯一需要注意的是,它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)