Rimuovi il file senza chiedere


89

Come posso rimuovere il file senza chiedere all'utente se accetta di eliminare il file? Sto scrivendo script di shell e utilizzo la funzione rm, ma mi chiede "rimuovere il file normale?" e non ne ho davvero bisogno. Grazie.


5
rm -f, yes | rmE così via, ma appartiene a SU.

4
rmnon mostra un "rimuovere il file normale?" richiesta di default. È necessario averlo alias rm -io definito come una funzione. Sono sorpreso che l'alias sia visibile nella tua sceneggiatura. Stai eseguendo lo script ( ./foo.sh) o acquistandolo ( . foo.sho source foo.sh)?
Keith Thompson,

Risposte:


103

Potresti essere stato rmaliasato rm -iquindi prova questo:

/bin/rm -f file.log

Per vedere i tuoi alias puoi eseguire alias.


7
In alternativa, usa command rm ...o \rm ...per saltare l'alias / funzione
glenn jackman,

6
È stato sostenuto che aver fatto rmun'alleanza rm -iè una cattiva idea. Il rmcomando, per impostazione predefinita, rimuove silenziosamente il file indicato. Alias ​​a rm -i, puoi prendere l'abitudine di non controllare attentamente prima di premere Invio, a seconda del prompt interattivo per salvarti. Quindi si digita rm some-important-fileun ambiente senza l'alias.
Keith Thompson,

@Keith Questo è molto vero, io personalmente alias rm-rm -v
chown

1
Se "rm" è una funzione (anziché un alias), questa risposta dovrebbe funzionare. E il unsetcomando bash potrebbe essere interessante
Xen2050,

56

Il flag force rimuove tutti i prompt;

rm -f {file}


2
Questo è quello che sto cercando, non la risposta accettata.
gsamaras,

30

Che la forza sia con te - rm -f


5
Ho già votato a favore della risposta di Lynk, e questa è esattamente la stessa. Sto solo votando per il senso dell'umorismo
rain_

Ho votato sia al commento che alla risposta solo perché qualcuno ha effettivamente trovato un senso dell'umorismo su SO ...
Mac

5

All'interno di uno script di shell, vorresti utilizzarlo, rm -f <filename>ma hai anche la possibilità di sbarazzarti -idell'opzione implicita per il tuo ambiente inserendo unalias rmnella tua shell (o profilo).


unalias rmnon funziona in CentOS? Amazon Linux?
Suncatcher,

5

il yesprogramma risponde ripetutamente Sì a qualsiasi richiesta. così puoi inserirlo nel rmprogramma interattivo per ottenere anche l'effetto desiderato.

yes | rm <filename>

viceversa, se non vuoi fare qualcosa di interattivo, puoi farlo

yes n | <something interactive>

e questo ripeterà 'n' sul flusso di input (rispondendo efficacemente no alle domande)


L' yes nopzione non funziona per me. Mentre uso yes n | rm file.txt, rimuove effettivamente il file anche se il file è protetto correttamente.
iammilind,

5

Se si dispone delle autorizzazioni necessarie per eliminare il file e non si desidera ricevere una richiesta, attenersi alla seguente procedura (-f = force):

rm -f file

Se non si dispone delle autorizzazioni per il file, sarà necessario utilizzare:

sudo rm -f file

1
Il "rimuovere il file normale?" prompt implica che non è un problema di autorizzazioni.
Keith Thompson,

4
\rm file

La barra rovesciata \ignora gli alias.


1
"\" è una barra rovesciata, che vuoi dire?
Cand3r

Sì, per usare rm senza alias che si traducono in prefissi di dialoghi di conferma indesiderati con \.
teknopaul,

1

Oltre all'utilizzo del -fparametro, in alternativa è possibile utilizzare findinvece il comando, ad es

find -name file.log -delete

0

Attualmente sto lavorando a un sistema, in cui la shell bash ha ricevuto la definizione del comando rm come funzione in uno dei file di configurazione globale:

 rm  () { /bin/rm -i ${1+"$@"}; }

Pertanto, nessuna delle risposte sopra riportate relative agli alias ha funzionato. Per contrastare il fastidioso comportamento ho disattivato la funzione rm nel mio file .bashrc

 unset -f rm

Ho avuto un problema simile all'apri. Tuttavia non ho trovato alcuna risposta che menzionasse la possibilità che rmè nascosta da una funzione shell. Quindi ho aggiunto la risposta qui nella speranza che sarebbe di aiuto per qualcuno che affronta lo stesso tipo di problema.

Digitare /bin/rmo rm -ftutto il tempo è scomodo e può avere conseguenze negative (nel caso di rm -f).


Ciò potrebbe aver risolto il tuo problema ma non risponde alla domanda.
sospetto

La risposta selezionata non /bin/rmfunzionerebbe? Se ho una funzione in bash e un file eseguibile con lo stesso nome nella directory corrente, solo l'aggiunta ./davanti al nome chiamerà il file, non la funzione. PS: ho aggiunto un commento alla risposta selezionata su una funzione eunset
Xen2050,

Sì, /bin/rmfunziona. Fare la unsetelimina la necessità di digitare il percorso completo.
daw

0

Se si rmdispone di alias rm -i, quindi utilizzare unalias rm;

Non utilizzare rm -fdirettamente se non si desidera veramente rimuovere molti file protetti da scrittura. Ci deve essere un ottimo motivo per usare -f.

Tuttavia, se disponi di molti file protetti da scrittura, potresti preferire rsync -r --delete empty/ removed_dir/una velocità maggiore.


0

Il mio modo preferito per farlo è semplicemente usare il commandcomando in bash, proprio come si usa sudo. Questo eseguirà il tuo comando senza alias, proprio come eseguendolo /bin/rm(probabilmente rmè aliasato come rm -i).

Esempio:

command rm -f /tmp/file.txt

0
rm -Rf <folder-to-be-deleted>

-R: ricorsivo f: force, nessun prompt

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.