it-swarm.com.de

Wie lösche ich unter Linux alle Dateien mit Ausnahme des Musters * .txt?

Ich weiß, wie man alle txt Dateien im aktuellen Verzeichnis von rm *.txt. Weiß jemand, wie man alle Dateien im aktuellen Verzeichnis löscht, AUSSER txt Datei?

86
Firegun

Sie können find verwenden:

find . -type f ! -name '*.txt' -delete

Oder die erweiterten Globbing-Funktionen von bash:

shopt -s extglob
rm *.!(txt)

Oder in zsh:

setopt extendedglob
rm *~*.txt(.)
#  ||     ^^^ Only plain files
#  ||^^^^^ files ending in ".txt"
#  | \Except
#   \Everything
122
Kevin

Wenn Sie nur alle Dateien außer '* .txt' löschen möchten, können Sie den folgenden Befehl verwenden:

$ find . -type f ! -name "*.txt" -exec rm -rf {} \;

wenn Sie aber auch Verzeichnisse zusammen mit den Dateien löschen möchten, können Sie Folgendes verwenden:

$ find . ! -name "*.txt" -exec rm -r {} \;

14
Sagar Rakshe

es gibt viele Möglichkeiten, dies zu tun. aber der einfachste Weg wäre (bash):

shopt -s extglob
rm !(*.txt)
11
Kent

Eine Lösung ohne find:

mv dir/*.txt otherdir/
rm -r dir
mv otherdir dir

Dies sollte bei allen Arten von Muscheln funktionieren.

4
michas

Sie können invertiertes grep und xargs verwenden

ls | grep -v .txt$| xargs rm
4
rjv

Einfach machen:

rm $(ls -I "*.txt" )# Löscht den Dateityp außer * .txt

Wenn Sie "außer einem oder mehreren Dateitypen" löschen müssen, gehen Sie wie folgt vor:

rm $(ls -I "*.txt" -I "*.pdf" ) # Löscht Dateitypen außer * .txt & * .pdf

2
Surya

Dies funktioniert auch, um alle versteckten (Punkt) Dateien und Ordner mit Ausnahme der angegebenen (.mydir):

rm -rf $(ls -aI ".mydir")
0
Chetabahana