Bash için "Extended pattern" extglob'a rastladım. Ben sadece yazabilirsiniz dizinde 2017/02/27
ve 2017/02/28
dosyaları listelemek istersenizBash genişletilmiş desende kaçış @ (..)
/basedir/2017/02/26/uniquedirs1/files.log
/basedir/2017/02/27/uniquedirs2/files.log
/basedir/2017/02/28/uniquedirs3/files.log
/basedir/2017/03/01/uniquedirs4/files.log
/basedir/2017/03/02/uniquedirs5/files.log
:
Böyle bir dizin yapısını düşünün: http://wiki.bash-hackers.org/syntax/pattern
Bu davayı araştırıyorum:
ls /basedir/2017/02/@("27"|"28")/*/files.log
Awesome! Şimdi bu soruya cevap verin. Bash genişletilmiş modelinde birden fazla dizini nasıl tanımlayabilirim?
Bu işe yaramazsa:
ls /basedir/2017/@("02/28"|"03/01")/*/files.log
ls /basedir/2017/@("02\/28"|"03\/01")/*/files.log
ben "Genişletilmiş desen" için birden fazla dizin tanımlamak için olsun herhangi bir yolu var mı?
Brace genişletme ile ilgili tek sorun, aralığı dinamik olarak tanımlayamamam. – Asgair
Uzun desenlerle yapamazsınız, yani bir şey kaybetmezsiniz :) – chepner
Tamam. Bu utanç verici ... Hala verimli bir çözüme daha yakın değilim. Sahip olduğum tek sorun, bir brace genişlemesinin dinamik olarak tanımlanamamasıdır. Bir alt kabukta yürütmediğim sürece, var1 = "02/28,03/01" ls/basedir/2017/"$ var1"/*/files.log' gibi. Ama bu çalışır: 'var2 =" 27 | 28 "ls/basedir/2017/02/@ (" $ var2 ")/*/files.log' – Asgair