Myslím, že toto je nejelegantnější, protože se také nesnaží posunout ..
:
mv /source/path/{.[!.],}* /destination/path
Komplexní sadu řešení naleznete v odpovědi UNIX &Linux na Jak přesunete všechny soubory (včetně skrytých) z jednoho adresáře do druhého?. Ukazuje řešení v Bash, zsh, ksh93, standardní (POSIX) sh atd.
Tyto dva příkazy můžete použít společně:
mv /path/subfolder/* /path/ # your current approach
mv /path/subfolder/.* /path/ # this one for hidden files
Nebo vše dohromady (díky pfnuesel):
mv /path/subfolder/{.,}* /path/
Což se rozšíří na:
mv /path/subfolder/* /path/subfolder/.* /path/
(příklad:echo a{.,}b
expanduje na a.b ab
)
Všimněte si, že se zobrazí několik varování:
mv: cannot move ‘/path/subfolder/.’ to /path/.’: Device or resource busy
mv: cannot remove /path/subfolder/..’: Is a directory
Prostě je ignorujte:děje se to proto, že /path/subfolder/{.,}*
také expanduje na /path/subfolder/.
a /path/subfolder/..
, což jsou adresář a nadřazený adresář (viz Co znamenají „.“ a „..“, když jsou ve složce?).
Pokud chcete pouze kopírovat, můžete použít pouhé:
cp -r /path/subfolder/. /path/
# ^
# note the dot!
Tím se zkopírují všechny soubory, normální i skryté, od /path/subfolder/.
expanduje na "vše z tohoto adresáře" (Zdroj:Jak kopírovat pomocí cp, aby zahrnoval skryté soubory a skryté adresáře a jejich obsah?)
To přesune všechny soubory do nadřazeného adresáře, jak se očekávalo, ale nepřesune skryté soubory. Jak to udělat?
Můžete zapnout dotglob
:
shopt -s dotglob # This would cause mv below to match hidden files
mv /path/subfolder/* /path/
Chcete-li vypnout dotglob
, musíte říct:
shopt -u dotglob