..
も移動しようとしないので、これが最もエレガントだと思います。 :
mv /source/path/{.[!.],}* /destination/path
UNIX と Linux の回答で、これに関する包括的なソリューション セットを見つけることができます。How do you move all files (include hidden) from one directory to another? Bash、zsh、ksh93、標準 (POSIX) sh などでのソリューションを示します。
これら 2 つのコマンドを一緒に使用できます:
mv /path/subfolder/* /path/ # your current approach
mv /path/subfolder/.* /path/ # this one for hidden files
またはすべて一緒に (pfnuesel に感謝):
mv /path/subfolder/{.,}* /path/
これは次のように展開されます:
mv /path/subfolder/* /path/subfolder/.* /path/
(例:echo a{.,}b
a.b ab
に展開されます )
これにより、いくつかの警告が表示されることに注意してください:
mv: cannot move ‘/path/subfolder/.’ to /path/.’: Device or resource busy
mv: cannot remove /path/subfolder/..’: Is a directory
それらを無視してください:これは /path/subfolder/{.,}*
が原因で発生します /path/subfolder/.
にも展開されます および /path/subfolder/..
、ディレクトリと親ディレクトリです (フォルダー内で「.」と「..」は何を意味するかを参照してください)。
単にコピーしたい場合は、単に使用できます:
cp -r /path/subfolder/. /path/
# ^
# note the dot!
/path/subfolder/.
以降、通常のファイルと隠しファイルの両方のすべてのファイルがコピーされます。 「このディレクトリのすべて」に展開されます (出典:隠しファイルと隠しディレクトリとその内容を含めるために cp でコピーする方法は?)
<ブロック引用>
これにより、期待どおりにすべてのファイルが親ディレクトリに移動されますが、隠しファイルは移動されません。その方法は?
dotglob
をオンにすることができます :
shopt -s dotglob # This would cause mv below to match hidden files
mv /path/subfolder/* /path/
dotglob
をオフにするには 、次のように言う必要があります:
shopt -u dotglob