Saya pikir ini yang paling elegan, karena juga tidak mencoba memindahkan ..
:
mv /source/path/{.[!.],}* /destination/path
Anda dapat menemukan serangkaian solusi lengkap tentang ini di jawaban UNIX &Linux untuk Bagaimana Anda memindahkan semua file (termasuk yang tersembunyi) dari satu direktori ke direktori lain?. Ini menunjukkan solusi dalam Bash, zsh, ksh93, standar (POSIX) sh, dll.
Anda dapat menggunakan kedua perintah ini secara bersamaan:
mv /path/subfolder/* /path/ # your current approach
mv /path/subfolder/.* /path/ # this one for hidden files
Atau bersama-sama (terima kasih pfnuesel):
mv /path/subfolder/{.,}* /path/
Yang meluas ke:
mv /path/subfolder/* /path/subfolder/.* /path/
(contoh:echo a{.,}b
diperluas ke a.b ab
)
Perhatikan bahwa ini akan menampilkan beberapa peringatan:
mv: cannot move ‘/path/subfolder/.’ to /path/.’: Device or resource busy
mv: cannot remove /path/subfolder/..’: Is a directory
Abaikan saja:ini terjadi karena /path/subfolder/{.,}*
juga diperluas ke /path/subfolder/.
dan /path/subfolder/..
, yang merupakan direktori dan direktori induk (Lihat Apa arti “.” dan “..” saat berada di folder?).
Jika Anda hanya ingin menyalin, Anda dapat menggunakan:
sajacp -r /path/subfolder/. /path/
# ^
# note the dot!
Ini akan menyalin semua file, baik yang normal maupun yang tersembunyi, sejak /path/subfolder/.
memperluas ke "semuanya dari direktori ini" (Sumber:Bagaimana cara menyalin dengan cp untuk menyertakan file tersembunyi dan direktori tersembunyi beserta isinya?)
Ini akan memindahkan semua file ke direktori induk seperti yang diharapkan tetapi tidak akan memindahkan file tersembunyi. Bagaimana cara melakukannya?
Anda dapat mengaktifkan dotglob
:
shopt -s dotglob # This would cause mv below to match hidden files
mv /path/subfolder/* /path/
Untuk menonaktifkan dotglob
, Anda harus mengatakan:
shopt -u dotglob