同じ基本ファイル名のファイルがいくつかあります。 1つを除いてすべて削除したい
_foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
_
保持する必要がない場合は、_rm foo.*
_を使用できることはわかっています。
[〜#〜] tldp [〜#〜] は、一致を否定する_^
_を示しています。試行錯誤の末、
_rm foo.*[^org]
_
必要なことを行いますが、構文がよくわかりません。
また、私のユースケースの制限ではありませんが、このパターンは_foo.o
_および_foo.or
_も無視すると思います。このパターンはどのように機能し、only_foo.org
_を無視するグロブはどのように見えますか?
shopt -s extglob
echo rm foo.!(org)
これは「foo」です。 「org」以外のものが続く
ref: https://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching
Bashでは、GLOBIGNORE="*.org"; rm -i foo*
も使用できます。
完了したらunset GLOBIGNORE
。
shopt -s extglob
ほど良くはありませんが、覚えやすいと思います。
パイプでできる?
ls * | grep -v "foo.org" | xargs -I {} echo {}
(明らかに、最後のチェーンでechoをrmに置き換えることをお勧めします)。