私はファイルを持っています:
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
一致させます。.txt
e.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$')