Saya memiliki nilai musik GB pada HDD saya yang diformat dengan EXT4. Saya ingin memindahkan file-file ini ke partisi HDD yang diformat FAT. Namun, saya tidak dapat memindahkan sebagian besar file saya karena mereka memiliki ":" dalam nama-nama (Misalnya, "Act 2: ....." untuk opera). Apakah ada cara dengan baris perintah untuk mengganti nama semua file saya dari "XXXX: XXXX" menjadi "XXXX-XXXX"?
sumber
find .
nama subdirektori mendahului isinya. Jadi jika Anda memiliki file/1:/2:
terlebih dahulu/1:/
akan diubah namanya menjadi/1-/
. Sekarang Anda tidak dapat mengganti nama/1:/2:
menjadi/1-/2-
karena/1:/2:
tidak ada.find . -type d -readable -writable -exec rename 's|:|-|g' {} \;
Dan kemudian file:find . -type f -readable -writable -exec rename 's|:|-|g' {} \;
for i in {1..20}; do find . -maxdepth $i -mindepth $i -name "*:*" -exec rename 's|:|-|g' {} \;; done
. Ubah 20 ke kedalaman maksimum dir. struktur. Tidak harus tepat - bisa lebih besar. Akan memakan waktu jika diatur ke angka yang sangat besar.Saya tidak di mesin linux saya sekarang jadi saya hanya bisa memberikan informasi kasar.
Linux memiliki utilitas commandline yang disebut
rename
yang berfungsi dengan input, ekspresi reguler, atau regex lainnya. Anda harus dapat menggunakannya bersama dengan regex seperti "s /: / - /" pada file Anda untuk mencapai penggantian nama yang Anda inginkan.Agar aman, lakukan dalam batch kecil dan / atau tes pertama dengan simulasi (ganti nama memiliki bendera yang hanya memberi Anda nama lama dan nama baru file tanpa benar-benar mengganti nama - gunakan ini untuk memverifikasi terlebih dahulu)
sumber
Ini adalah solusi dalam python yang menangani kasus di mana file tidak harus dalam direktori yang sama.
rootdir
ke direktori terluar yang sedang dipertimbangkan (Gunakan nama jalur lengkap yang dimulai dengan /. Tidak ada singkatan atau variabel env seperti ~ diizinkan). Tidak perlu meletakkan \ sebelum karakter khusus - misalnya jika dir paling luar adalah /.../ HDD saya, masukkanrootdir = "/.../My HDD"
TIDAKrootdir = "/.../My\ HDD"
(Catat "s) [Saya menjadi eksplisit ini hanya karena Anda mungkin tidak terbiasa dengan python. dimaksudkan.]logfile
ke lokasi file log yang diinginkan. Pada akhirnya, file ini akan berisi daftar file yang diganti namanya - untuk referensi di masa mendatang.python rename.py
.Peringatan: Lakukan tes pada sampel kecil sebelum mempertaruhkan seluruh GB musik.
Detail: Mengganti nama dilakukan dari file paling dalam ke luar.
sumber
Saya menyadari ini adalah posting yang sangat lama. Solusi rekursif AeroGT80 sangat menyeluruh, tetapi sangat lambat. Saya menjalankannya sekitar setengah jam di server yang lebih lambat dan hanya selesai setengahnya saja - saya pikir itu sekitar 73.000 file di sekitar 300 sub-direktori.
Solusi di bawah ini akan beroperasi jauh lebih cepat (ini beroperasi pada semua file dalam direktori, daripada setiap file satu-per-satu - menggunakan solusi non-rekursif AeroGT80). Satu-satunya masalah adalah, hanya turun satu direktori (jadi tidak sepenuhnya rekursif seperti solusinya), tapi saya yakin itu bisa dimodifikasi dengan cukup mudah.
sumber