GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Alle Dateien/Verzeichnisse außer einer Datei entfernen?

Ich habe ein Verzeichnis mit vielen Dateien. Ich möchte alle Dateien außer file.txt löschen. Wie mache ich das?

Es gibt zu viele Dateien, um die unerwünschten einzeln zu entfernen, und ihre Namen sind zu unterschiedlich, um sie mit * außer dieser einen Datei zu entfernen.

Jemand hat vorgeschlagen,

zu verwenden
rm !(file.txt)

Aber es funktioniert nicht. Es gibt zurück:

Badly placed ()'s 

Mein Betriebssystem ist Scientific Linux 6.

Irgendwelche Ideen?

Akzeptierte Antwort:

POSIXly:

find . ! -name 'file.txt' -type f -exec rm -f {} +

entfernt alle regulären Dateien (rekursiv, einschließlich versteckter) außer file.txt . Um Verzeichnisse zu entfernen, ändern Sie -type f zu -type d und fügen Sie -r hinzu Option zu rm .

In bash , um rm -- !(file.txt) zu verwenden müssen Sie extglob:

aktivieren
$ shopt -s extglob 
$ rm -- !(file.txt)

(oder Aufruf von bash -O extglob )

Beachten Sie, dass extglob funktioniert nur in bash und Korn-Shell-Familie. Und mit rm -- !(file.txt) kann dazu führen, dass eine Argument list too long wird Fehler.

In zsh , können Sie ^ verwenden um Muster mit aktiviertem Extendedglob zu negieren:

$ setopt extendedglob
$ rm -- ^file.txt

oder die gleiche Syntax mit ksh verwenden und bash mit Optionen ksh_glob und no_bare_glob_qual aktiviert.


Linux
  1. So finden Sie eine Datei in Linux rekursiv in allen Verzeichnissen

  2. Verwenden Sie Suchen, um ein bestimmtes Verzeichnis zu finden und alle darin enthaltenen Dateien außer einem Verzeichnis zu löschen?

  3. Wie lösche ich alle Dateien außer einer benannten Datei aus einem bestimmten Ordner?

  4. Wie kann ich nach Dateien suchen und sie in einer Zip-Datei komprimieren?

  5. Verzeichnisse mit allen Dateien finden, die älter als X sind?

ls-Befehl in Linux zum Auflisten von Dateien

Symbolischer Link:findet alle Dateien, die auf diese Datei verlinken

Konvertieren Sie alle Dateierweiterungen in Kleinbuchstaben

Wie teilt man eine Textdatei in mehrere *.txt-Dateien auf?

Finden Sie alle Dateien, die älter als eine Minute sind

Stellen Sie nginx.conf so ein, dass alle Verbindungen außer zu bestimmten Dateien oder Verzeichnissen verweigert werden