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.
-
mvv 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ělinkaunlink) - 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čí
mvkterou 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.