Bagaimana saya bisa memindahkan file dengan mengetik secara rekursif dari direktori dan sub-direktori ke direktori lain?


30

Apa cara yang baik untuk memindahkan jenis file dari direktori dan semua sub-direktori?

Seperti "pindahkan semua * .ogg di / thisdir secara rekursif ke / somedir". Saya mencoba beberapa hal; Upaya terbaik saya adalah (masih belum terlalu bagus):

find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;

Ini dikembalikan pada setiap baris sebelum setiap nama file,

mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'

Jawaban:


23

Anda dapat menggunakan find dengan xargs untuk ini

find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir

-I pada perintah di atas memberi tahu xargs string pengganti apa yang ingin Anda gunakan (jika tidak, ia menambahkan argumen di akhir perintah).

ATAU
Dalam perintah Anda, cobalah untuk memindahkan '{}' setelah mvperintah.

find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;


1
jangan lupa untuk mengambil cadangan sebelum mencoba perintah di atas :-).
Hemant

2
Btw, untuk -print0 pertama untuk find dan -0 untuk xargs harus digunakan sebaik mungkin, untuk menghindari spasi putih dalam masalah nama file.
maxschlepzig

@maxschlepzig: poin bagus. Saya akan mengedit.
Hemant

2
Saya sangat menyarankan menggunakan di mv -isini, sehingga Anda tidak mengambil risiko menimpa file jika sesuatu yang tidak terduga terjadi.
Gilles 'SO- stop being evil'

2
dengan mv dari utas inti gnu yang dapat Anda gunakan mv -t <targetdir>dan + bukan \;


9

Di zsh atau bash 4, untuk mengumpulkan semua *.oggfile ke /somedir:

mv /thisdir/**/*.ogg /somedir

Jika Anda ingin mereproduksi hierarki direktori: (peringatan, ketikkan langsung ke browser)

rsync -a --prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir

luar biasa nyaman di bash
Mark
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.