Saya memiliki file dengan karakter yang tidak valid seperti ini
009_-_�%86ndringshåndtering.html
Ini adalah di Æ
mana ada yang salah dalam nama file.
Apakah ada cara untuk menghapus semua karakter yang tidak valid?
atau bisa tr
digunakan entah bagaimana?
echo "009_-_�%86ndringshåndtering.html" | tr ???
Jawaban:
Salah satu caranya adalah dengan sed:
Ganti
file
dengan nama file Anda, tentu saja. Ini akan menggantikan apa pun yang bukan huruf, angka, titik, garis bawah, atau tanda garis dengan garis bawah. Anda dapat menambah atau menghapus karakter agar tetap sesuai keinginan, dan / atau mengubah karakter pengganti menjadi hal lain, atau tidak sama sekali.sumber
f='file'; mv 'file' ${f//[^A-Za-z0-9._-]/_}
Saya berasumsi Anda berada di kotak Linux dan file dibuat di kotak Windows. Linux menggunakan UTF-8 sebagai pengkodean karakter untuk nama file, sedangkan Windows menggunakan sesuatu yang lain. Saya pikir ini adalah penyebab masalahnya.
Saya akan menggunakan "convmv". Ini adalah alat yang dapat mengonversi nama file dari satu pengkodean karakter ke karakter lain. Untuk Eropa Barat salah satu dari ini biasanya berfungsi:
Jika Anda perlu menginstalnya di Linux berbasis Debian Anda dapat melakukannya dengan menjalankan:
Ini bekerja untuk saya setiap waktu dan memulihkan nama file asli.
Sumber: LeaseWebLabs
sumber
Save the current file in Word 97-2004 format\sco.workflow
yang dibuat di Mac saya (via Microsoft Office) dan penyandian di atas tidak berpengaruh.--notest
opsi untuk benar-benar mengganti nama file.Saya berasumsi Anda bermaksud ingin melintasi sistem file dan memperbaiki semua file tersebut?
Begini cara saya akan melakukannya
Itu akan menemukan semua file dengan karakter non-ascii dan mengganti karakter tersebut dengan garis bawah (
_
). Berhati-hatilah, jika file dengan nama baru sudah ada, itu akan menimpanya. Script dapat dimodifikasi untuk memeriksa kasus seperti itu, tetapi saya tidak memasukkannya agar tetap sederhana.sumber
Mengikuti jawaban di https://stackoverflow.com/questions/2124010/grep-regex-to-match-non-ascii-characters , Anda dapat menggunakan:
di mana
*
cocok dengan file yang ingin Anda ganti namanya. Jika Anda ingin melakukannya di banyak direktori, Anda dapat melakukan sesuatu seperti:Anda bisa menggunakan argumen -n
rename
untuk melakukan dry run, dan melihat apa yang akan diubah, tanpa mengubahnya.sumber
Saya punya beberapa file jepang dengan nama file yang rusak pulih dari usb stick yang rusak dan solusi di atas tidak bekerja untuk saya.
Saya merekomendasikan paket detox:
Contoh penggunaan:
sumber
detox
sebelum pada dasarnya menciptakan kembali roda. Jika Anda melihat halaman manual, Anda akan melihat bahwa itu mencakup semua solusi yang diusulkan di sini karena fleksibilitasnya.的节奏啊
, tetapi karakter tersebut adalah nama file yang valid.Script shell ini membersihkan direktori secara rekursif, untuk membuat file portable antara Linux / Windows dan FAT / NTFS / exFAT. Ini menghapus karakter kontrol,
/:*?"<>\|
dan beberapa nama Windows yang dicadangkan sukaCOM0
.Secara teori Linux tidak terlalu membatasi (
/
dan\0
dilarang keras dalam nama file) tetapi dalam praktiknya beberapa karakter mengganggu perintah bash (seperti*
...) sehingga mereka juga harus dihindari dalam nama file.Sumber hebat untuk pembatasan penamaan file:
sumber
Jika Anda ingin menangani baris baru, karakter multibyte, spasi, tanda hubung utama, garis miring terbalik, dan spasi yang Anda perlukan sesuatu yang lebih kuat, lihat jawaban ini:
https://superuser.com/a/858671/365691
Saya memasang script di code.google.com jika ada yang tertarik: rnf-bash-rename-script
sumber
Saya menggunakan satu-baris ini untuk menghapus karakter yang tidak valid dalam file subtitle:
Ini berfungsi untuk menormalkan nama direktori film:
Langkah-langkah yang sama seperti di atas, tetapi saya menambahkan satu perintah sed lagi untuk menghapus periode di akhir direktori
X-Men Days of Future Past (2014) [1080p]
Dimodifikasi ke:
X-Men.Days.of.Future.Past.2014.1080p
sumber
untuk file dalam *; lakukan mv "$ file" $ (echo "$ file" | sed -e 's / [^ A-Za-z0-9. -] / / g'); Selesai &
sumber