Mam nazwę katalogu foo
w ~/Desktop
. Załóżmy, że chcę utworzyć katalog z terminala o tej samej nazwie i w tej samej lokalizacji. Kiedy próbowałem mkdir
, wystąpił błąd:
mkdir: cannot create directory `/home/nux/Desktop/foo': File exists
To ma sens, ale chcę je wymienić, foo
jeśli istnieje. Przejrzałem, man mkdir
ale nie ma takiej możliwości.
Jak więc zastąpić foo
katalog?
Dlaczego nie mkdir
ma takiej możliwości?
foo
jak usunąć całą zawartość?mkdir
ma-p
opcję, która ignoruje, jeśli katalog istnieje.Odpowiedzi:
Jeśli Twoim celem jest wykonanie polecenia jednowierszowego, które:
~/Desktop/foo
jeśli już istnieje.~/Desktop/foo
jeśli jeszcze nie istnieje.Następnie możesz użyć:
;
jest równoważny nowej linii, ale umożliwia wykonywanie wielu poleceń w jednym wierszu (tj. jako „pojedyncze polecenie”).-f
flagi, aby je usunąć bez monitowania użytkownika interaktywnie. Jest w porządku, ale zalecam zachowanie szczególnej ostrożnościrm -rf ...
. Zobaczman rm
szczegóły.rm
polecenia, aby zakończyć, zanimmkdir
polecenie zostanie wykonane; to jest powód, aby użyć;
zamiast&
. (Polecenie poprzedzające&
działa asynchronicznie w tle).mkdir
komendy do uruchomienia, gdyrm
komenda się powiedzie; to jest powód, aby użyć;
zamiast||
.mkdir
polecenie, gdyrm
polecenie się nie powiedzie (zwykle błąd oznacza, że katalog jeszcze nie istniał); to jest powód, aby użyć;
zamiast&&
.rm
Polecenie może zawieść nawet gdy katalog już istnieje, w którym to przypadkumkdir
komenda nie powiedzie się również, ale komunikaty o błędach będzie sensu i nie ma chyba potrzeby dodawać środkowy sprawdzanie krok dofoo
„s istnienia przed próbuje go utworzyć.Zobacz 3.2.3 listy poleceń w podręczniku Reference Bash więcej informacji i wyjaśnień na temat
;
,&
,||
oraz&&
operatorów.Zgodnie z sugestią Muru (i rozwiniętą przez Rinzwind ), polecam
rsync
sprawdzić, czy spełni twoje potrzeby tworzenia kopii zapasowych. Na stronie dokumentacji rsync znajduje się kilka dodatkowych przydatnych przewodników , a także ten przewodnik Ubuntu rsync .mkdir
tworzy katalogi („mk” oznacza „make” ). Gdyby również rekurencyjnie usuwać katalogi i wszystkie pliki w nich byłyby złe, ponieważ naruszałoby to zasadę najmniejszego zdziwienia w sposób, który prawdopodobnie prowadziłby do utraty danych.rmdir
nawet nie usuwa katalogów, które zawierają pliki (inne niż katalog).rm
ma-r
opcję, która ma sens, ponieważrm
oczekuje się, że usunie pliki (to jest jej cel, dlatego nieodłączne niebezpieczeństwo jest intuicyjne, a użytkownicy zwykle wiedzą, że należy zachować ostrożność podczas uruchamianiarm
poleceń).źródło
Nie, nie ma jednego polecenia, aby wykonać to, o co prosisz.
Dlaczego?
W tym przypadku polecenia
mkdir
irm
wykonują to, czego potrzebujesz, i działają dobrze razem, ponieważrm -r
spowoduje również usunięcie katalogu, a następniemkdir
utworzenie katalogu.1 The Art of Unix Programming , Eric S. Raymond, sam cytując Douga McIlroya.
źródło
Polecenie usunięcia katalogu to
rm
. Potrzebujesz więc 2 poleceń.Jak pokazano w komentarzach, możesz połączyć je za pomocą
;
(= wykonaj oba, nawet jeśli 1. nie powiedzie się) lub&&
(= tylko mkdir, gdy rm nie zawiedzie).-r
Jest do usuwania katalogów. Pierwsze polecenie usuwa również CAŁĄ zawartość katalogu. Jeśli NIE jest to twoja intencja, zarówno rm, jak i mkdir nie są tym, czego szukasz: uprawnienia tochmod
ichown
.Dwuznaczność.
mkdir
oznacza zrobić katalog. Nie usuwaj i nie twórz katalogu. A ponieważrm
polecenie służy do usuwania rzeczy, nie ma potrzebyrmdir
usuwania katalogu.źródło
Aby to zrobić w najczystszy sposób, używam tego:
I aby go użyć:
To gwarantuje, że to, co próbujesz usunąć, to katalog, a nie plik:
-d
Sprawdź, czy katalog o tej nazwie już istnieje. jeśli tak, usuń go.-f
Sprawdź, czy nie istnieje plik o tej nazwie. jeśli tak, wydrukuj komunikat o błędzie i zakończ.Utwórz nowy katalog i powodzenie echa, a jeśli nie powiodło się, echo nie powiodło się.
źródło