Rimuovi tutti i file nella cartella tranne uno utilizzando il terminale OS X

1

Vorrei rimuovere l'intero contenuto di una cartella, a parte un file. Il problema è impossibile copiare il file in un'altra cartella e quindi tornare alla prima cartella, perché l'applicazione non accetta il file, quindi l'unico file deve rimanere nella cartella.

Esiste un comando come quello che ho descritto?

    
posta user121028 06.07.2015 - 09:39
fonte

2 risposte

4

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.

    
risposta data 06.07.2015 - 09:49
fonte
0

Per essere veramente sicuri di ciò, puoi usare find per creare uno shellscript di cancellazione con i comandi "rm":

find . ! -name "<filename>" -exec echo "rm -rf {}" >> /tmp/rm.sh \;

Elimina ogni riga nella shellscript /tmp/rm.sh che non ti piace, quindi eseguila

bash /tmp/rm.sh

Ma attenzione - trova anche le directory e "rm -rf" le cancellerebbe in modo ricorsivo! Affina la tua ricerca dicendo di trovare il tipo di file da cercare:

find . ! -name "<filename>" -type <filetype> -exec echo "rm -rf {}" >> /tmp/rm.sh \;

Buon divertimento! : -)

    
risposta data 06.07.2015 - 10:25
fonte

Leggi altre domande sui tag