Linuxで特定の拡張子を除く特定の拡張子を持つファイルを削除する

Linuxで特定の拡張子を除く特定の拡張子を持つファイルを削除する

私はファイルを持っています:

a.txt
b.txt
e.txt
c.c
d.o

.txt含まれていないファイルだけを削除したいe.txtので、最後に残ったファイルは次のようになります。

e.txt
c.c
d.o

答え1

与えられた:

cpetro01@<work_laptop> ~/Notes/test
$ ls
a.jpg  a.txt  b.mov  b.txt  c.jpg  c.mov

する:

$ find ./ -name "*.txt" -not -name "e.txt"
./a.txt
./b.txt

したがって:

cpetro01@<work_laptop> ~/Notes/test
$ ls
a.jpg  a.txt  b.mov  b.txt  c.jpg  c.mov  e.txt

cpetro01@<work_laptop> ~/Notes/test
$ find ./ -name "*.txt" -not -name "e.txt" -exec rm {} \;

cpetro01@<work_laptop> ~/Notes/test
$ ls
a.jpg  b.mov  c.jpg  c.mov  e.txt

そうですか?

答え2

2つの方法:

  • 変数を使用してGLOBIGNOREワイルドカードを使用するときに無視されるファイル名を示します。

    GLOBIGNORE=e.txt
    rm -- *.txt
    unset GLOBIGNORE
    
  • オプションを設定し、拡張ワイルドカードを使用して、以下を除くすべてのファイルをextglob一致させます。.txte.txt

    shopt -s extglob
    rm -- !(e).txt
    shopt -u extglob
    

答え3

.txt以下を除くすべてのファイルが一覧表示されますe.txt

ls -1 *.txt | grep -v '^e.txt$'

それからあなたはできますコマンドの置き換え次のファイルを削除するように指示しますrm

rm $(ls -1 *.txt | grep -v '^e.txt$')

関連情報