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'
Steve Burdine
sumber

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 \;

Hemant
sumber
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 \;
10
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;

Anda agak menukar argumen untuk mv

Distrik Pengkodean
sumber
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
Gilles 'SANGAT berhenti menjadi jahat'
sumber
luar biasa nyaman di bash
Mark