Anda dapat melakukan ini dengan GNU find
dan GNU mv
:
find /dir1 -mindepth 2 -type f -exec mv -t /dir1 -i '{}' +
Pada dasarnya, cara yang berfungsi jika find
melewati seluruh pohon direktori dan untuk setiap file ( -type f
) yang tidak ada di direktori tingkat atas ( -mindepth 2
), ia menjalankan a mv
untuk memindahkannya ke direktori yang Anda inginkan ( -exec mv … +
). The -t
argumen untuk mv
memungkinkan Anda menentukan direktori tujuan pertama, yang diperlukan karena +
bentuk -exec
menempatkan semua lokasi sumber di akhir perintah. The -i
merek mv
bertanya sebelum Timpa duplikat apapun; Anda dapat menggantikan -f
menimpa mereka tanpa meminta (atau -n
untuk tidak meminta atau menimpa).
Seperti yang ditunjukkan Stephane Chazelas, hal di atas hanya berfungsi dengan alat GNU (yang merupakan standar pada Linux, tetapi tidak pada kebanyakan sistem lainnya). Berikut ini agak lambat (karena memanggil mv
beberapa kali) tetapi jauh lebih universal:
find /dir1 -mindepth 2 -type f -exec mv -i '{}' /dir1 ';'