4

xonsh を使用して、ディレクトリ内の複数のファイルを bzip したいと考えています。私は最初にこれを次のように試みます:

$ 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

$()わかりましたので、明示的に使用します

$ 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.

これを行うより良い方法はありますか?

$ xonsh --version
('xonsh/0.3.4',)
4

2 に答える 2

8

あなたは2番目の例に非常に近いです。注意すべき唯一のことfnは、これが Python 変数名であるため@()、サブプロセスに渡すために使用する必要があることです。

$ for fn in $(ls).split(): . bzip2 @(fn)

また、v0.3.4 では、ls の代わりに正規表現グロビングを使用できます。

$ for fn in `.*`: . bzip2 @(fn)

そして、少なくともマスターでは、!() を 1 行ずつ繰り返すことができるようになりました。

$ for fn in !(ls): . bzip2 @(fn)

于 2016-06-23T01:35:38.417 に答える