Come eliminare tutti i file e le directory in una directory, inclusi quelli nascosti tranne .htaccess?


0

Come suggerisce la domanda, ho una situazione in cui ho una cartella in cui gli utenti possono caricare cose strane lì. Avere un cron job impostato per pulire questa cartella ogni poche ore.

Ha un .htaccess per motivi di sicurezza, naturalmente, la mia domanda è: come posso eliminare tutto (file e directory) in quella directory, compresi quelli nascosti il ​​cui nome inizia con un punto, ma non il .htaccess ?

Al momento devo rm -rf *fare il lavoro ma se l'utente carica un file con un nome che inizia con un punto, non verrà eliminato.

Qualsiasi aiuto sarebbe molto apprezzato. Grazie!


1
Perché non lo copi .htaccessin una nuova directory, rimuovi l'intera directory in una sola volta, quindi rinomina nuovamente la directory?
Alvin Wong,

Grazie per il consiglio. Cosa intendi rinominando la directory? Pensavo fosse rimosso? Questo approccio non disabiliterebbe temporaneamente la funzione di caricamento?
datasn.io,

intende qualcosa del tipomkdir newDir; cp uploadDir/.haccess newDir; rmdir uploadDir; mv newDir uploadDir;
Mcalex,

Il metodo sopra interromperà i caricamenti per il poco tempo in cui la cartella non esiste. La risposta di Ingacio funziona e mantiene intatta la directory.
Mcalex,

Interferirà anche con strumenti esterni come SELinux che dipendono da alcune proprietà della directory stessa.
Ignacio Vazquez-Abrams,

Risposte:


3

In bash:

shopt -s dotglob extglob
rm !(.htaccess)

Grazie! Le opzioni dotglob ed extglob sono permanentemente impostate successivamente o sono solo temporanee? Devo disabilitarli dopo questo?
datasn.io,

Sono impostati fino a quando non li disabiliti. Se si desidera che vengano impostati temporaneamente, eseguire i comandi in una subshell.
Ignacio Vazquez-Abrams,

3

Userei find, come: find /path/to/dir/ -mindepth 1 -not -name .htaccess -delete

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.