Script shell untuk memindahkan semua file dari subfolder ke folder induk


48

Saya punya banyak folder di folder A. Saya ingin memindahkan file dari semua folder itu ke A.

Atau

Saya ingin memotong semua file dari folder anak dan menempelnya di folder induk.

Bagaimana cara melakukannya?


1
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.


1
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:

  1. Anda ingin melakukan ini secara rekursif (Dalam subfolder dan subfolder dari subfolder tersebut)
  2. Anda ingin melewatkan pemindahan file skrip
  3. Anda memiliki izin untuk memindahkan file di folder itu
  4. 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.
Luis Alvarado
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.