Saya belum benar-benar diuji ini menjadi sangat mudah atau apa, tetapi apakah Anda mencoba hanya dengan memasukkan perintah ini dari Folder A di terminal: mv */* .?
Marty Fried
Apakah Anda yakin tidak ada nama file duplikat?
jippie
mv */* .tidak akan memindahkan file dari subfolder subfolder.
Rahul Virpara
@ jippie ya, tidak ada nama rangkap
Rahul Virpara
Jawaban:
82
Buka Adirektori Anda dan jalankan
find .-mindepth 2-type f -print -exec mv {}. \;
yang berarti "menemukan semua file dalam direktori ini dan sub-direktori dan jalankan mv dengan direktori target. untuk setiap file ditemukan untuk memindahkannya ke direktori saat ini.
itu juga mencoba untuk memindahkan file yang sudah ada di direktori induk.
Rahul Virpara
virpara: sekarang ini edisi Anda lupa semua file di direktori .dot. Merevisi dengan -menghasilkan 2 sebagai gantinya untuk menekan peringatan.
Tuminoid
1
Dengan GNU findAnda bisa menjadi sedikit lebih elegan dan tidak menelurkan mvproses untuk setiap file:find A -mindepth 2 -type f -exec mv -t A \{\} +
David Foerster
David, versi Anda bekerja sampai Anda menekan batas panjang baris perintah maksimum, yang tidak terlalu sulit dilakukan mengingat bagaimana menemukan mencetak jalur, terutama dalam kasus di mana Anda memintanya dari direktori selain A, seperti dalam contoh Anda.
Tuminoid
9
Ini sangat berbahaya. jika Anda memiliki file dengan nama file yang sama di subfolder yang berbeda, Anda akan menimpa semua ini dengan temuan terakhir. Lebih baik menggunakan mv dengan --backup = numbered:find . -mindepth 2 -type f -print -exec mv --backup=numbered {} . \;
pLumo
4
Anda dapat membuat file dan beri nama "cutme" (untuk membuat file bernama cutme dalam tipe terminal nano cutme. Untuk menyimpannya tekan CTRL + X lalu tekan ENTER.) Misalnya dan tempel yang berikut dengan asumsi bahwa:
Anda ingin melakukan ini secara rekursif (Dalam subfolder dan subfolder dari subfolder tersebut)
Anda ingin melewatkan pemindahan file skrip
Anda memiliki izin untuk memindahkan file di folder itu
File mungkin atau mungkin tidak termasuk spasi dalam namanya
find * -type f -print -not -type d -and -not -regex 'cutme' -exec mv {} .. \;
Perhatikan nama cutme di dalam baris. Seharusnya sama dengan skrip yang akan Anda jalankan.
Setelah membuat file dan menempelkan baris di atas, jalankan yang berikut di folder yang sama dengan skrip:
chmod +x cutme. Ini akan memberikan file baru Anda yang "Executable" bendera sehingga Anda dapat menjalankan seperti ini: ./cutme.
Mengapa saya harus mencoba memindahkan file yang sudah ada di direktori induk?
Rahul Virpara
Anda akan menjalankan skrip dari dalam folder. Setiap file di dalamnya, apakah di dalam subfolder atau tidak akan pindah ke folder induk folder. Folder induk di sini adalah induk terkait dengan tempat skrip berada. Sebenarnya dengan mengubah 2 titik terakhir Anda dapat mengetahui di mana harus memindahkan semua file di dalam folder tempat Anda menjalankan skrip.
mv */* .
?mv */* .
tidak akan memindahkan file dari subfolder subfolder.Jawaban:
Buka
A
direktori Anda dan jalankanyang berarti "menemukan semua file dalam direktori ini dan sub-direktori dan jalankan mv dengan direktori target. untuk setiap file ditemukan untuk memindahkannya ke direktori saat ini.
sumber
find
Anda bisa menjadi sedikit lebih elegan dan tidak menelurkanmv
proses untuk setiap file:find A -mindepth 2 -type f -exec mv -t A \{\} +
find . -mindepth 2 -type f -print -exec mv --backup=numbered {} . \;
Anda dapat membuat file dan beri nama "cutme" (untuk membuat file bernama cutme dalam tipe terminal
nano cutme
. Untuk menyimpannya tekan CTRL + X lalu tekan ENTER.) Misalnya dan tempel yang berikut dengan asumsi bahwa:find * -type f -print -not -type d -and -not -regex 'cutme' -exec mv {} .. \;
Perhatikan nama cutme di dalam baris. Seharusnya sama dengan skrip yang akan Anda jalankan.
Setelah membuat file dan menempelkan baris di atas, jalankan yang berikut di folder yang sama dengan skrip:
chmod +x cutme
. Ini akan memberikan file baru Anda yang "Executable" bendera sehingga Anda dapat menjalankan seperti ini:./cutme
.sumber