Używam rm
skryptu BASH do usuwania wielu plików. Czasami pliki nie są obecne, więc zgłasza wiele błędów. Nie potrzebuję tej wiadomości. Przeszukałem stronę podręcznika w poszukiwaniu polecenia rm
uciszającego, ale jedyną opcją jaką znalazłem jest to -f
, że z opisu „ignoruj nieistniejące pliki, nigdy nie pytaj” wydaje się być właściwym wyborem, ale nazwa nie wydaje się pasować , więc obawiam się, że może to mieć niezamierzone konsekwencje.
- Czy ta
-f
opcja jest właściwym sposobem na milczenierm
? Dlaczego to się nie nazywa-q
? - Czy ta opcja robi coś innego?
Odpowiedzi:
Głównym zastosowaniem programu
-f
jest wymuszenie usunięcia plików, które nie zostałyby usunięte przy użyciurm
samego programu (w szczególnym przypadku „usuwa” nieistniejące pliki, pomijając w ten sposób komunikat o błędzie).Możesz także po prostu przekierować komunikat o błędzie za pomocą
(lub odpowiednik systemu operacyjnego). Możesz sprawdzić wartość
$?
natychmiast po wywołaniu,rm
aby zobaczyć, czy plik został faktycznie usunięty, czy nie.źródło
--f
jest ważny dla GNU Coreutilsrm
, ale tylko dlatego, że jest unikalnym skrótem--force
. Krótka forma-f
jest bardziej przejrzysta i bardziej przenośna.--f
tutaj jest tylko literówka dla-f
.2>
?Tak,
-f
jest to najbardziej odpowiednia opcja.źródło
rm
dorm -i
.-f jest poprawną flagą, ale dla operatora testowego nie rm
zapewnia to, że plik istnieje i jest zwykłym plikiem (nie katalogiem, węzłem urządzenia itp.)
źródło
if [ -f "$THEFILE" ]; then rm "$THEFILE"; fi
:, co sprawia, że test i kroki usuwania pliku są jawnie sekwencyjne.test
arm
. Nie ma możliwościrm
wykonania wcześniejtest
tutaj. Patrzenie przed wykonaniem skoku jest częstym błędem w programowaniu współbieżnym - nie możesz już dłużej ufać wynikowi „spojrzenia”, kiedy faktycznie „skaczesz”; rozwiązaniem jest użycie operacji blokowania lub atomowych. Właśnie dlatego chceszrm -f
, co jest przykładem tego drugiego.\rm -f file
nigdy nie zgłosi braku znalezienia.źródło
rm
(co było popularne w niektórych witrynach na początku lat 90., aby uniemożliwić początkującym usuwanie rzeczy, a następnie wywoływanie administratora systemu w celu odzyskania plików).&&
podczas gdy bez -f psuje się, gdy plik nie zostanie znaleziony.Jeśli chodzi o
rm -f
robienie „czegokolwiek innego”, wymusza (-f
jest skrótem--force
) ciche usunięcie w sytuacjach, w których wrm
innym przypadku poprosiłbyś o potwierdzenie. Na przykład podczas próby usunięcia pliku, do którego użytkownik nie ma prawa zapisu, z katalogu, do którego użytkownik ma prawo zapisu.źródło
Miałem ten sam problem dla cshell. Jedynym rozwiązaniem, jakie miałem, było utworzenie fałszywego pliku, który pasował do wzorca przed "rm" w moim skrypcie.
źródło
rm -f
czyrm filename >&/dev/null
?