Czuję, że powinienem wiedzieć na pewno: jeśli to zrobię ls <something>
, rm <something>
usunę dokładnie te same ls
wyświetlane pliki ? Czy są jakieś okoliczności, w których rm
można usunąć pliki, które ls
nie były wyświetlane? (To jest w bash 18.04)
Edycja: dziękuję wszystkim, którzy odpowiedzieli. Myślę, że pełna odpowiedź jest kombinacją wszystkich odpowiedzi, więc zaakceptowałem najbardziej uprzywilejowaną odpowiedź jako „odpowiedź”.
Nieoczekiwane rzeczy, których nauczyłem się po drodze:
ls
nie jest tak prosty, jak mogłoby się wydawać, jeśli chodzi o obsługę argumentów- W prostej nieskrępowanej instalacji Ubuntu aliasy .bashrc
ls
- Nie nadawaj nazw plikom zaczynającym się od myślnika, ponieważ mogą one wyglądać jak argumenty poleceń, a nazywanie jednego -r wymaga tego!
find -delete
być lepsze niż rm
? Mówisz „właśnie dlatego” , ale nie jest dla mnie całkowicie jasne, do czego to się odnosi. Zauważ też, że twoje find
wywołanie usunie rekursywnie wszystkie pliki w bieżącym katalogu, rm
a po prostu usunie pliki z katalogu bezpośredniego. To także -name *
nie ma możliwości. Podsumowując, jestem dość zaskoczony twoją radą ...
find
jest taka, że możesz ją uruchomić, zobaczyć wszystkie pliki, a następnie uruchomić to samo polecenie -delete
. Ponieważ już widziałeś wyniki find
, nie powinno być dwuznaczności co do tego, co zostanie usunięte (tak naprawdę chciałbym usłyszeć więcej szczegółów na ten temat w formie odpowiedzi)
-delete
" - Ale jak to jest lepsze niż uruchamianie ls <filespec>
, a następnie rm <filespec>
(co OP już wie, jak to zrobić)?
find ... -print
najpierw, aby potwierdzić, które pliki zostaną usunięte, a następnie find ... -delete
nadal będziesz usuwać pliki utworzone między dwoma poleceniami. Jeśli użyjesz obu z nich, -print
a -delete
nie otrzymasz potwierdzenia, tylko raport po fakcie o tym, co zostało usunięte (i równie dobrze możesz użyć rm -v
).
rm
nie ma--dry-run
flagi ...