デフォルトのファイル名が同じファイルが複数あります。一つだけ除いて全て削除したい
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
1つを保管する必要がない場合は使用できることがわかりますrm foo.*
。
TLDP否定一致を示します^
。試行錯誤を経て調べたのは
rm foo.*[^org]
必要な作業を行いますが、構文をよく理解していません。
また、これは私のユースケースの制限ではありませんが、このパターンはfoo.o
とfoo.or
。このモードの仕組みと無視されたグロブに発生する現象ただ foo.org
そうですか?
答え1
shopt -s extglob
echo rm foo.!(org)
これはfoo.
NOTに続くすべての項目と一致します。org
後で正常なグローバル動作を復元するには、次のようにします。
shopt -u extglob
答え2
BashではGLOBIGNORE="*.org"; rm -i foo*
。
unset GLOBIGNORE
終わった後。
に比べて良くありませんが、shopt -s extglob
覚えやすいです。
答え3
パイプは何ができますか?
ls * | grep -v "foo.org" | xargs -I {} echo {}
(明らかに最後のチェーンでechoをrmに変更したいかもしれません)。
答え4
もう一つの方法です。foo.sh
ジョブから除外したいファイルがいくつかありますが、csv
他のファイルはすべて追加したいとします。次のループを使用できます。
for f in *; do
if [ "${f: -3}" != ".sh" ]; then
mv "$f" "${f%}.csv"
fi
done