2016-06-22 10 views
2

xonshを使用してディレクトリ内の複数のファイルをbzipしたいと考えています。これを行うには良い方法はありxonshを使用してlsでファイルをループする

$ 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 

OK、私は$()明示的

$ 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',) 

答えて

5

2番目の例は非常に近いです。

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

また、v0.3.4に、あなたがグロブの代わりに正規表現を使用することもできます。注意すべき唯一のことは、fnは、Pythonの変数名ですので、あなたがサブプロセスにそれを渡すために@()を使用しなければならないことですLSは、

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

と、少なくともマスターに、あなたは今反復処理することができます()ライン・バイ・ライン、あなたはLSに結婚している場合は、以下も動作することを意味します!

(正規表現、シェル、および経路品種で利用可能)グロブ使用
for fn in !(ls): 
    print(fn.rstrip()) 

:(OS、グロブ、またはpathlibモジュールを参照のPython APIを使用

for fn in g`*`: 
    print(fn) 

lsを使用

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

関連する問題