Vorrei andare in questo modo:
find . ! -name <filename> -delete
affinché funzioni con le cartelle, devi sostituire delete con exec rm -r
find . ! -name <filename> -exec rm -rv {} \;
Questo si riduce a
find = trova
. = nella directory di lavoro corrente, puoi sostituire . con un percorso, come ~/Documents/
! = non
-name = nome
<filename> = file
-exec = esegui
rm -rv = verbose remove
{} = risultati del ritrovamento
\; = chiudi l'esecuzione
Trova tutti i file e le cartelle nella cartella di lavoro, che non ha il nome filename e quindi esegui il comando remove sui risultati.
Dovresti eseguire una prova a secco senza l'opzione di eliminazione, in primo luogo:
find . ! -name <filename>
Questo comando ti fornisce un elenco di tutti i file e le cartelle nella tua directory di lavoro che non sono denominati <filename> . L'aggiunta di -delete o -exec rm -rv {} \; , cancellerà questi file e la cartella (la versione exec ).
Potresti anche usare
rm -v [^filename]
per le cartelle aggiungi -r
rm -rv [^filename]
In qualche modo mi sento più a mio agio usando l'opzione find . Soprattutto perché puoi fare una corsa a secco. In entrambi i casi vorrei iniziare con una cartella fittizia e provare entrambe le opzioni.