mv
a rsync
nejsou podobné programy. Konkrétně mv
se často pokouší jednoduše přejmenovat objekty. Pokud je ve stejném souborovém systému, nekopíruje obsah vůbec.
Pokud jste ještě neměli imperative_PLs/fortran
a poté mv
by trvalo stávající fortran
adresář a přejmenujte jej na tento bod ve stromu.
Ale v tomto umístění již máte adresář (s obsahem). Protože název může odkazovat pouze na jeden objekt, existující adresář by musel být buď odstraněn, nebo přejmenován. mv
předpokládá, že nechcete dělat ani jedno, a přeruší se.
rsync
místo toho zkopíruje jednotlivé soubory a další obsah uvnitř fortran
a vloží je do existujícího imperative_PLs/fortran
adresář.
Představte si to jako rename
místo toho a chování se může zdát srozumitelnější.
mv
je ve skutečnosti rename
pod krytem.
Pokud přesunete soubor do jiného souboru, mv
předpokládá, že víte, co děláte, a přepíšete cílový soubor.
Pokud přesunete adresář do jiného adresáře, mv
předpokládá, že chcete zachovat základní název vašeho původního adresáře a vytvořit jej v cílovém adresáři. Pokud na cílové straně ještě není adresář s tímto názvem nebo pokud adresář s tímto názvem existuje, ale je prázdný, operace bude úspěšná.
Pokud však cílový adresář již existuje a není prázdný, není to již rename
ale to by mělo být rekurzivní odstranění souborů a adresářů. rename
není navržen tak, aby to dělal, takže selže, mv
nejde dále, protože předpokládá, že jste to nechtěli udělat, a také selže.
-
mv
v tomto případě nefunguje, protože k tomu není navržen. Systémová volání jsou (pravděpodobně) buď- Přesunout do stejného souborového systému:
rename
(původnělink
aunlink
) - Přesun mezi systémy souborů:rekurzivní kopírování souboru následované rekurzivním
unlink
- Přesunout do stejného souborového systému:
-
Názor:Myslím, že to není tak moc, že to bylo navrženo ne fungovat, protože nebyl navržen tak, aby zvládl tento případ použití. Pro „jednoduchý“ nástroj, který má dělat jednu věc dobře, budete muset poskytnout sadu přepínačů, které označí
mv
kterou z těchto akčních cest se vydat:- K kauci s chybou, jako v aktuální implementaci
- Chcete-li sloučit, kauce s chybou, pokud soubor již existuje
- Chcete-li sloučit, nahraďte všechny cílové soubory, které již existují
Pokud je akce sloučení/nahrazení tím, co chcete, můžete ji dostatečně snadno implementovat pomocí cp
následuje rm
, nebo pomocí jednoho z obslužných programů pro kopírování stromu souborů tar
, pax
, atd.