Usuń plik bez pytania

89

Jak mogę usunąć plik bez pytania użytkownika, czy zgadza się on usunąć plik? Piszę skrypt powłoki i używam funkcji rm, ale pojawia się pytanie „usunąć zwykły plik?” i naprawdę tego nie potrzebuję. Dziękuję Ci.

Hej
źródło
5
rm -f, yes | rmI tak dalej, ale to należy do SU.
4
rmnie wyświetla się komunikat „usunąć zwykły plik?” monit domyślnie. Musisz mieć to aliasy rm -ilub zdefiniować jako funkcję. Dziwi mnie, że alias jest widoczny w twoim skrypcie. Czy wykonujesz skrypt ( ./foo.sh) czy pozyskujesz go ( . foo.shlub source foo.sh)?
Keith Thompson,

Odpowiedzi:

102

Być może masz rmalias, rm -iwięc spróbuj tego:

/bin/rm -f file.log

Aby zobaczyć swoje aliasy, możesz uruchomić alias.

chown
źródło
7
command rm ...\rm ...
Możesz
6
Argumentowano, że rmalias do rm -ito zły pomysł. rmPoleceń domyślnie dyskretnie usuwa nazwie pliku. Poprzez aliasy do tego rm -i, możesz przyzwyczaić się do nie sprawdzania dokładnie przed naciśnięciem Enter, w zależności od interaktywnego monitu o uratowanie cię. Następnie piszesz rm some-important-filew środowisku bez aliasu.
Keith Thompson,
@Keith To bardzo prawda, ja osobiście pseudonim rm to rm -v
chown
1
Jeśli „rm” jest funkcją (zamiast aliasu), ta odpowiedź powinna działać. unsetPolecenie bash może być interesujące
Xen2050,
56

Flaga siły usuwa wszystkie monity;

rm -f {file}

rysie
źródło
2
Właśnie tego szukam, a nie przyjętej odpowiedzi.
gsamaras
29

Niech moc będzie z Tobą - rm -f

manojlds
źródło
5
Poparłem już odpowiedź rysia i to jest dokładnie to samo. Tylko entuzjazm dla poczucia humoru
rain_
Głosowałem zarówno za komentarzem, jak i za odpowiedzią tylko dlatego, że ktoś naprawdę poczuł humor na SO ...
Mac
5

W skrypcie powłoki chciałbyś użyć, rm -f <filename>ale masz również możliwość pozbycia się -iopcji niejawnej dla twojego środowiska poprzez wejście unalias rmdo powłoki (lub profilu).

Musannif Zahir
źródło
5

yesProgram wielokrotnie odpowiada twierdząco na którekolwiek podpowiedzi. dzięki czemu możesz podłączyć go do interaktywnego rmprogramu, aby uzyskać pożądany efekt.

yes | rm <filename>

i odwrotnie, jeśli nie chcesz robić czegoś interaktywnego, możesz to zrobić

yes n | <something interactive>

i to powtórzy „n” w strumieniu wejściowym (skutecznie odpowiadając „nie” na pytania)

mholm815
źródło
Ta yes nopcja nie działa dla mnie. Kiedy używam yes n | rm file.txt, faktycznie usuwa plik, mimo że plik jest odpowiednio chroniony.
iammilind,
5

Jeśli masz wymagane uprawnienia do usunięcia pliku i nie chcesz otrzymywać monitu, wykonaj następujące czynności (-f = force):

rm -f file

Jeśli nie masz uprawnień do pliku, musisz użyć:

sudo rm -f file
Kassym Dorsel
źródło
1
„Usunąć zwykły plik?” podpowiedź sugeruje, że nie jest to problem z uprawnieniami.
Keith Thompson,
4
\rm file

Ukośnik \odwraca aliasy.

teknopaul
źródło
1
„\” to ukośnik odwrotny, co masz na myśli?
Cand3r
Tak, aby użyć rm bez aliasów, co powoduje niechciany prefiks dialogów potwierdzenia za pomocą \.
teknopaul
1

Oprócz używania -fparametru możesz findzamiast tego użyć polecenia, np

find -name file.log -delete
kenorb
źródło
0

Obecnie pracuję w systemie, w którym powłoka bash otrzymała definicję polecenia rm jako funkcji w jednym z globalnych plików konfiguracyjnych:

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

Dlatego żadna z powyższych odpowiedzi dotyczących aliasów nie zadziałała. Aby przeciwdziałać irytującemu zachowaniu, wyłączam funkcję rm w moim pliku .bashrc

 unset -f rm

Miałem podobny problem jak otwieracz. Jednak nie znalazłem żadnej odpowiedzi, która wspomniałaby o możliwości rmukrytej przez funkcję powłoki. Więc dodałem tutaj odpowiedź w nadziei, że okaże się pomocna dla kogoś, kto boryka się z tym samym rodzajem problemu.

Pisanie /bin/rmlub rm -fcały czas jest niewygodne i może mieć złe konsekwencje (w przypadku rm -f).

kawka
źródło
To mogło rozwiązać problem, ale nie odpowiada na pytanie.
podejrzany
Czy wybrana odpowiedź - połączenie nie /bin/rmzadziała? Jeśli mam funkcję w bash, a plik wykonywalny o tej samej nazwie w bieżącym katalogu, po prostu dodanie ./przed nazwą wywoła plik - nie funkcję. PS - Dodałem komentarz do wybranej odpowiedzi na temat funkcji iunset
Xen2050
Tak, /bin/rmdziała. Wykonanie czynności unseteliminuje potrzebę wpisywania pełnej ścieżki.
daw
0

Jeśli masz rmpseudonim rm -i, użyj unalias rm;

Nie używaj rm -fbezpośrednio, chyba że naprawdę chcesz usunąć wiele plików chronionych przed zapisem. Musi istnieć bardzo dobry powód do korzystania -f.

Jeśli jednak masz dużo plików chronionych przed zapisem, możesz wybrać rsync -r --delete empty/ removed_dir/większą prędkość.

Zhu Jinxuan
źródło
0

Moim ulubionym sposobem na to jest po prostu użycie commandpolecenia w bash, tak samo jak używasz sudo. Spowoduje to uruchomienie polecenia bez aliasów, podobnie jak uruchomienie go /bin/rm(prawdopodobnie rmjest to alias as rm -i).

Przykład:

command rm -f /tmp/file.txt
Patryk Milewski
źródło
0
rm -Rf <folder-to-be-deleted>

-R: Rekurencyjne f: siła, bez pytania

mdivk
źródło