Uruchomiłem skrypt w języku Python, który źle działał i użył go sudo
do utworzenia pliku o nazwie >
.
Jak mogę pozbyć się tego pliku?
Oczywiście, kiedy próbuję, pojawia sudo rm >
się błąd bash: syntax error near unexpected token 'newline'
, ponieważ wydaje się, że próbuję przekierować wyjście rm
.
Jego uprawnienia to -rw-r--r--
.
sudo touch >
w powłoce dałby ten sam błąd.) Powiedziałeś, że to ze skryptem Pythona, prawdopodobnie utworzonym przez przekazanie">"
do jakiejśos
funkcji. Więcsudo python <<< 'import os; os.remove(">")'
powinno działać dobrze.Odpowiedzi:
Każdy z nich powinien działać:
Zauważ, że dwa ostatnie polecenia, które używają
find
, znajdą wszystkie pliki lub katalogi wymienione>
w bieżącym folderze i wszystkich jego podfolderach. Aby tego uniknąć, użyj GNU find:źródło
find
tak nie jest,rm
ponieważ jest rekurencyjne i usunie każdy plik nazwanyrm
w bieżącym drzewie katalogów, bez względu na to, jak głęboko.rm
warianty) są takie same. To tylko trzy różne sposoby ochrony tej nazwy pliku przed powłoką. Naprawdę nie ma powodu, aby preferować jeden od drugiego.find(1)
? Jedyny problem polega na tym, że należy podać metaznak powłoki. Istnieje milion i jeden różnych programów, które mogą usunąć plik, ale użycie czegoś innego niżrm(1)
tylko zaciemnia odpowiedź.sudo find . ! -name . -prune -name '>' -exec rm {} +
.find
nie dodaje nic za odpowiedź na zadane pytanie.Możesz także użyć Pythona, aby go usunąć:
Z POSIX
find
:źródło
>
jako przekierowania danych wyjściowych.To, co skończyłem na początku, działa również:
Jest to oczywiście wariant prostszy
sudo rm \>
.źródło
Próbowałem tego jako komentarz, ale wyszło to w jednym wierszu
źródło
Cytuj znak, aby nie był interpretowany przez powłokę jako przekierowanie:
Jeśli jednak masz inne pliki z dziwnymi znakami, najbezpieczniejszą metodą jest otwarcie eksploratora plików GUI, np.
nautilus
Usunięcie go.źródło