Pindahkan semua file dari subdirektori ke direktori saat ini?


13

Bagaimana saya bisa memindahkan file yang terdapat di semua subdirektori ke direktori saat ini, dan kemudian menghapus subdirektori kosong?

Saya menemukan pertanyaan ini , tetapi mengadaptasi jawaban untuk:

mv * .

tidak bekerja; Saya menerima banyak peringatan seperti:

mv: wil and ./wil are identical

File yang terkandung dalam subdirektori memiliki nama unik.

Jawaban:


22

Anda juga dapat menggunakan -mindepthopsi:

find . -type f -mindepth 2 -exec mv -i -- {} . \;

(Bersama dengan -maxdepthAnda juga dapat membatasi level hierarki untuk mengumpulkan file.)

Saya menggunakan mv -i("interaktif") untuk mvbertanya sebelum menimpa file. Dengan banyak subdirektori, mungkin ada bentrokan nama yang ingin Anda peringatkan.

The --pilihan berhenti pengolahan pilihan, sehingga mvtidak bingung dengan nama file dimulai dengan tanda hubung.

Bersihkan sejumlah besar subdirektori kosong dengan

find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;

Apakah ada cara untuk melewatkan pertanyaan tentang menimpa file dengan tidak menimpanya?
Filnor

2
Opsi untuk mv:: -n, --no-clobberjangan menimpa file yang ada. Anda mungkin tertarik -b, --backupjuga.
Florian Jenn

5

Coba ini:

find ./*/* -type f -print0 | xargs -0 -J % mv % .

More Info: Coba temukan-stamement saja, itu akan memberi Anda daftar dengan semua file yang ingin Anda pindahkan (biarkan keluar -print0). Contoh:

probe:test trurl$ find ./*/* -type f
./test_s/test_s_s/testf4
./test_s/test_s_s/testf5
./test_s/testf1
./test_s/testf2
./test_s/testf3
./test_s2/testf6
./test_s2/testf7

dengan -print0dan xargsAnda sekarang membuat daftar pernyataan untuk dieksekusi. The -J %berarti bendera, insert daftar elemen di sini, jadi mv $FILE .dijalankan untuk setiap file yang ditemukan.

Di atas berfungsi untuk xargs BSD. Jika Anda menggunakan versi GNU (Linux) -I %alih-alih-J %


0

Bash 4:

shopt -s globstar
for file in **; do [[ -f "$file" ]] && mv "$file" .; done

-2

1 trik cepat, hanya berfungsi jika file Anda memiliki ekstensi (dengan titik):

mv *.* subdir/
mv .* subdir/

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.