Saya memiliki banyak file .zip di beberapa direktori:
Fol1/Fol2
Fol3
Fol4/Fol5
Bagaimana cara saya memindahkan semuanya ke folder basis umum?
command-line
files
find
recursive
InquilineKea
sumber
sumber
Jawaban:
Buka direktori tingkat atas pohon yang berisi file zip (
cd …
), lalu jalankanIni berfungsi di luar kotak di zsh. Jika shell Anda adalah bash, Anda harus menjalankannya
shopt -s globstar
terlebih dahulu (Anda bisa dan harus meletakkan perintah ini di Anda~/.bashrc
). Jika shell Anda adalah ksh, Anda harus menjalankannyaset -o globstar
terlebih dahulu (letakkan di Anda~/.kshrc
).Atau, gunakan
find
, yang bekerja di mana-mana tanpa persiapan khusus tetapi lebih rumit:Jika Anda ingin menghapus direktori kosong setelahnya, di zsh:
Dalam bash atau ksh:
dan ulangi selama ada direktori kosong untuk dihapus. Atau, dalam cangkang apa pun
sumber
find
Perintah pertama di atas bekerja di bash, tetapi harus berubah kefind . -name
dll untuk membuatnya berfungsi..
adalah implisit untuk menemukan GNU tetapi tidak untuk orang lain, saya telah menambahkannya secara eksplisit.Jika Anda hanya ingin memindahkan
.zip
file, Anda bisa melakukan sesuatu sepertisumber
Jika Anda menggunakan bash versi 4 atau lebih tinggi atau zsh, Anda juga dapat menggunakan globbing rekursif:
Ini HANYA akan memindahkan file dan bukan jalur relatifnya, sehingga benturan mungkin terjadi.
sumber
Yang ini aman ketika memindahkan data dan bebas dari kesalahan yang mendukung sebagian besar semua distro tanpa memandang versi. Perintah ini akan memindai subdirektori dan kemudian memindahkan atau menyalin ke direktori tujuan baru Anda.
*.flac
apa pun seperti*.zip
dalam kasus Anda. Atau*.doc
sembarang ekstensi bekerja.mv
merupakan perintah untuk memindahkan file, atau Anda dapat menggunakancp
untuk menyalin data alih-alih memindahkan../flac/
adalah direktori tujuan tempat saya ingin memindahkan semua file FLAC. Anda juga dapat memberikannya path lengkap seperti/home/myid/flac/
Contoh lengkap. (dalam hal ini, ada banyak subdirektori dengan nama artis musik di
/home/myid/Music/
kemudian file FLAC adalah seluruh level subdirektori yang berbeda. Karena saya tidak memerlukan folder artis tetapi ingin memiliki semua file FLAC dalam satu direktori di/home/myid/Music/flac/
Maka itu akan menampilkan semua file FLAC.
sumber
;
harus dilakukanSebagai bash hack, Anda bisa menggunakan kekuatan
tar
:Ini memiliki keuntungan karena tidak bergantung pada ekstensi file, karena ia menggunakan
file
perintah untuk memilih file yang akan dipindahkan dan mempertahankan struktur direktori, tetapi tidak bekerja dengan jalur yang berisi spasi.Final
rm
ada di sana hanya untuk menghapus file asli (karena @InquilineKea memberi tahu bahwa dia tidak peduli dengan folder asli dalam komentar).Tentu saja ini sangat cocok jika folder asal / dan target / berada pada disk yang berbeda. Kalau tidak, solusi lain yang diusulkan lebih efisien (bahkan jika mereka bergantung pada konvensi penamaan, alih-alih
file
konten).sumber
Dengan asumsi Anda memiliki versi pencarian dan mv GNU, yang berikut ini akan lebih efisien daripada jawaban berbasis penemuan yang ada:
Menggunakan a
+
di akhir find -exec berarti daftar file akan diteruskan ke perintah mv, daripada mengeksekusi satu perintah mv per file yang ditemukan. Namun, batasannya adalah Anda hanya dapat menempatkan '{}' di akhir perintah, yang mengharuskan penggunaan opsi mv --target-direktori, dan sejauh yang saya tahu itu adalah GNU-isme.sumber