Saya memiliki 50 folder dengan beberapa subfolder juga, dengan total lebih dari 1000 file audio. Saya perlu menghapus semua subfolder dan meletakkan semua file di level sekarang. mv */* ./
Sudah mencoba tetapi keluhan: daftar argumen terlalu panjang
shell
command-line
file-management
Pedro Gonzalez
sumber
sumber
t
bisa untuk "target"?-t
izinkan untuk menentukan tujuan terlebih dahulu. darimv
halaman manual:-t, --target-directory=DIRECTORY
move all SOURCE arguments into DIRECTORY
Perhatikan bahwa perintah itu akan menimpa file apa pun dengan nama yang sama. Anda dapat menggunakan ini untuk diminta sebelum menimpa:
Penjelasan
-type f
: hanya menemukan file biasa.-mindepth 2
: temukan hanya file dalam subdirektori.-exec mv -it ./ {}
:-exec
sarana "jalankan perintah ini pada setiap file yang ditemukan". The{}
akan diganti dengan nama file. The-i
switch membuatmv
interaktif, ia akan meminta sebelum Timpa file yang sudah ada dan-t
menetapkan target direktori untuk./
.+
: meletakkan file bersama-sama (dalam satu baris argumen) sehingga shell dapat beroperasi dengan perintah untuk memanggil waktu minimum perintah (bukan satu per satu tetapi satu ke beberapa).Mengenai penghapusan folder kosong lebih lanjut, Anda dapat menggunakan resep yang sama:
sumber
-type f
hanya memilih file biasa, tidak termasuk tautan simbolik, pipa bernama dan sejenisnya. Untuk memindahkan semua file selain dari direktori yang dapat Anda lakukan! -type d
.-L
parameter-i
adalah standar,-t
hanya untuk GNU (tidak ada hubungannya dengan Linux yang hanya sebuah kernel yang ditemukan di beberapa sistem GNU dan non-GNU)-t
tidak ada pada beberapa sistem (seperti AIX yang tidak terlalu kuno)find . -type f -mindepth 2 -exec mv {} ./ \;
Ya, itu batas ukuran kumulatif argumen dan lingkungan yang diteruskan ke
execve()
panggilan sistem saat menjalankan perintah eksternal.Dengan
zsh
, Anda dapat menggunakan builtinmv
sebagai gantinya:Atau gunakan
zargs
untuk memecah daftar menjadi potongan yang bisa diatur:Dengan
ksh93
:Dengan GNU
xargs
dan dengan GNUmv
dengan shell di manaprintf
builtin (kebanyakan,mksh
menjadi pengecualian):sumber
zsh
hal ini Anda dapat menaruh beberapa kualifikasi gumpal , misalnya(.)
atau(^/)
setelah terakhir*
.Solusi yang cukup portabel adalah:
temukan semua file di setiap subfolder, dan pindahkan dalam direktori saat ini
Anda dapat menambahkan
| egrep "\.au$|\.mp3$|\.ac3$"
di antara untuk juga memastikan file yang Anda temukan adalah file dengan ekstensi audio (tambahkan ekstensi sebanyak yang diperlukan untuk mencakup semua jenis, saya hanya menyediakan 3 yang umum)sumber
find
sama sekali. Cukupecho
atauprintf
find
jangan menyelesaikan masalah tetapixargs
lakukan.