2012-08-15 13 views
6

Domande

  • Qual è la differenza tra i rm -d e rm -R comandi Bash?
  • Quale dovrei usare?

dettagli

Secondo la pagina man per il comando rm:Bash: Qual è la differenza tra "rm -d" e "rm -R"?

  • rm -d tentativi di rimuovere le directory così come altri tipi di file .
  • rm -R tentativi di rimuovere la gerarchia di file radicata in ogni argomento di file . L'opzione -R implica l'opzione -d.

Ora, io sono a conoscenza di tale ultima affermazione (-R implica -d), che può sembrare di rispondere alla mia domanda. Tuttavia, mi chiedo ancora perché entrambe le flag di comando esistano in primo luogo, se sono presumibilmente identiche in quello che fanno.

Inoltre, poiché sono ancora in fase di apprendimento di Bash, penso che sia opportuno sapere quale opzione è la scelta preferita tra i programmatori Bash (convenzionalmente) e perché.

+0

Quale strana cosa è che voi state discutendo? Il mio bog standard GNU coreutils rm non ha un'opzione -d. – themel

+1

La versione BSD di 'rm' ha' -d'. Mentre lo standard POSIX dice che 'rm' dovrebbe comportarsi in modo identico a' rmdir' quando la destinazione è una directory, la versione BSD segue il comportamento storico di 'rm' a meno che non si usi' -d'. – chepner

+0

L'opzione '-d' non è in [POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/rm.html), quindi questa domanda dovrebbe essere taggata per il sistema specifico in cui la domanda è dirette. –

risposta

9

In genere, rm non rimuoverà una directory, anche se è vuota. rm -d fa semplicemente rm come rmdir. Si rifiuta comunque di rimuovere la directory se non è vuota, ma lo farà se è vuota.

rm -R è l'eliminazione completa ricorsiva, rimuovendo la directory e tutto il suo contenuto.

Non ho mai utilizzato -d, poiché non sapevo che esistesse e usavo sempre rmdir. Vorrei usare rmdir/rm -d se si desidera rimuovere la directory solo se è, infatti, vuota. Salva rm -R per quando sei pienamente consapevole del fatto che stai cercando di rimuovere una directory e tutti i suoi contenuti.

3

L'opzione -d è specifica per l'implementazione BSD di rm, che è quella che è probabile trovare sul vostro Mac. Non è presente nell'implementazione GNU che troverete su sistemi Linux.

Se si sta cercando la scelta preferita, sarebbe utilizzare -r (in minuscolo) per rimuovere interi alberi e rmdir per rimuovere singole directory, che si troveranno come codice che è più portatile.

-1

Giusto per essere chiari, è necessario non utilizzare mai rm -d. Supponendo che non solo fallisca con un messaggio di errore "Operazione non consentita", rimuoverà la directory senza rimuovendo il contenuto. In una directory vuota è uguale a rmdir. In una directory non vuota crea un'incoerenza nel filesystem che richiede una riparazione da parte di fsck o da un hacking manuale molto intelligente.

È un'opzione stupida che non avrebbe mai dovuto esistere.La gente del BSD aveva delle droghe cattive quando l'ha aggiunta. rm -r era stato in UNIX almeno dal 1973 e dal 1971. rmdir

+2

'rm -d' non riesce con" Directory non vuota "per me se la directory non è vuota. Forse il comportamento è cambiato a un certo punto. – chepner

0

rm cancellerà i file, ma ho avuto problemi cercando di rimuovere directory, quindi devono essere contrassegnate con qualche opzione,

rm -f costringerà file rimuove senza chiedere conferma

rm -r rimuoverà directory ma nel mio caso è stato richiede la conferma, ma perché ho così tanti file, ho continuato a digitare y e y che è stata presa per l'eternità

rm -Rf era la mia soluzione finale, ha forzato rimuovere la directory senza chiedere g per conferma

Problemi correlati