Mam skrypt bash, który chcę usunąć pliki z różnych katalogów. Często ich nie będzie, ponieważ nie zostały wygenerowane i to jest w porządku. Czy istnieje sposób, aby skrypt nie zgłaszał tego błędu, ale jeśli rm ma jakieś inne dane wyjściowe, aby to zgłosić?
Alternatywnie, czy jest lepsze polecenie do usunięcia pliku, który będzie mniej głośny?
Jeśli wymogiem jest to, że
rm
nie narzekają brakujące pliki, ale chcemy także żadnego innego wyjścia zrm
moja propozycja będzie pierwszym testem dla istnienia pliku docelowego, a jedynie zadzwonićrm
( bez tej-f
flagi) czy plik rzeczywiście istnieje.Wywołanie
rm -f
pliku, który na przykład nie ma uprawnień do zapisu przez użytkownika, usunie plik, a także nie wyświetli normalnego monitu dla tego scenariusza.Jeśli chcesz użyć tego samego pomysłu z wieloma plikami, utworzę definicję funkcji, na przykład:
Użyj tego jak:
qrm file1 file2-does-not-exist *.txt etc here
źródło
Stwierdziłeś, że nadal chcesz zobaczyć inne dane wyjściowe
rm
polecenia po jego uruchomieniu, ale użycie tej-f
opcji je wyciszy. Będziesz musiał przefiltrować STDERR pod kątem tego, co chcesz, co jest trochę trudne, biorąc pod uwagę, że chcesz pokazać wszystko inne.Będziesz chciał użyć takiego polecenia:
Wyjaśnienie polecenia:
-f
Argument polega na wymuszeniu, a nie monitowaniu o potwierdzenie lub błędy3>&1 1>&2 2>&3 3>&-
polega na przełączaniu się między STDOUT i STDERR w celu filtrowania (możesz przeczytać więcej na ten temat tutaj, jeśli chcesz)| grep -v 'No such file or directory'
odfiltrowuje wiadomość, której nie chcesz widziećTeraz, jeśli chcesz całkowicie wyłączyć komunikaty o błędach, możesz uruchomić następującą komendę:
To polecenie przekierowuje STDERR do / dev / null, więc nie zobaczysz go po uruchomieniu polecenia.
źródło
rm
bez-v
wyjścia na standardowe wyjście, tylko stderr, więc w tym przypadku można po prostu2>&1 | grep
bez tańca, który jest bardziej przydatny,Alternatywnie możesz użyć
find
polecenia z-delete
opcją. To (oczywiście) usunie tylko znalezione pliki, więc nigdy nie ostrzega, jeśli nie ma żadnych. Przykładem może być:który przeszuka
/var/log/triffids/
katalog i usunie wszystkie pliki z.log
sufiksem, które nie zostały zmodyfikowane przez ponad 30 dni.To jest zawsze dobry pomysł, aby uruchomić te polecenia bez tej
-delete
opcji po pierwsze, aby upewnić się, że znalezienie pliki można oczekiwać.źródło
Zaznacz opcję
--force
(-f
)rm
:źródło
To jest włamanie, ale zawsze możesz
touch
usunąć plik. Jeśli nie istnieje, zostanie utworzony, abyrm
można go było usunąć.źródło
Możesz użyć,
-f
jak to będzie, zgodnie ze stroną podręcznika:nic nie podpowie i zrobi dokładnie to, co chcesz.
źródło
Istnieją dwa główne sposoby: Jeśli dodasz opcję -f, nie wyświetli się błąd „nie istnieje” i dwa: (działa dla prawie każdego polecenia) zamiast po prostu wykonać polecenie „wykonaj” polecenie 2> / dev / null ”gdzie„ polecenie ”to wykonywane polecenie.
źródło