GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menghapus karakter yang tidak valid dari nama file?

Solusi 1:

Salah satu caranya adalah dengan sed:

mv 'file' $(echo 'file' | sed -e 's/[^A-Za-z0-9._-]/_/g')

Ganti file dengan nama file Anda, tentu saja. Ini akan mengganti apa pun yang bukan huruf, angka, titik, garis bawah, atau garis bawah dengan garis bawah. Anda dapat menambahkan atau menghapus karakter untuk mempertahankan sesuka Anda, dan/atau mengubah karakter pengganti menjadi yang lain, atau tidak sama sekali.

Solusi 2:

Saya berasumsi Anda menggunakan kotak Linux dan file dibuat di kotak Windows. Linux menggunakan UTF-8 sebagai pengkodean karakter untuk nama file, sedangkan Windows menggunakan yang lain. Saya pikir inilah penyebab masalahnya.

Saya akan menggunakan "convmv". Ini adalah alat yang dapat mengubah nama file dari satu pengkodean karakter ke yang lain. Untuk Eropa Barat, salah satu dari ini biasanya berfungsi:

convmv -r -f windows-1252 -t UTF-8 .
convmv -r -f ISO-8859-1 -t UTF-8 .
convmv -r -f cp-850 -t UTF-8 .

Jika Anda perlu menginstalnya di Linux berbasis Debian, Anda dapat melakukannya dengan menjalankan:

sudo apt-get install convmv

Ini bekerja untuk saya setiap saat dan memulihkan nama file asli.

Sumber:LeaseWebLabs

Solusi 3:

Saya memiliki beberapa file jepang dengan nama file rusak yang dipulihkan dari stik usb rusak dan solusi di atas tidak berhasil untuk saya.

Saya merekomendasikan paket detoksifikasi:

Utilitas detoks mengganti nama file agar lebih mudah digunakan. Ini menghilangkan spasi dan gangguan lainnya. Itu juga akan menerjemahkan atau membersihkan karakter Latin-1 (ISO 8859-1) yang disandikan dalam ASCII 8-bit, karakter Unicode yang disandikan dalam UTF-8, dan karakter lolos CGI.

Contoh penggunaan:

detox -r -v /path/to/your/files
-r Recurse into subdirectories
-v Be verbose about which files are being renamed 
-n Can be used for a dry run (only show what would be changed)

Solusi 4:

Saya menganggap maksud Anda Anda ingin melintasi sistem file dan memperbaiki semua file tersebut?

Inilah cara saya melakukannya

find /path/to/files -type f -print0 | \
perl -n0e '$new = $_; if($new =~ s/[^[:ascii:]]/_/g) {
  print("Renaming $_ to $new\n"); rename($_, $new);
}'

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. Skrip dapat dimodifikasi untuk memeriksa kasus seperti itu, tetapi saya tidak memasukkannya agar tetap sederhana.

Solusi 5:

Mengikuti jawaban di https://stackoverflow.com/questions/2124010/grep-regex-to-match-non-ascii-characters, Anda dapat menggunakan:

rename 's/[^\x00-\x7F]//g' *

di mana * cocok dengan file yang ingin Anda ganti namanya. Jika Anda ingin melakukannya di beberapa direktori, Anda dapat melakukan sesuatu seperti:

find . -exec rename 's/[^\x00-\x7F]//g' "{}" \;

Anda dapat menggunakan argumen -n untuk rename untuk melakukan uji coba, dan melihat apa yang akan diubah, tanpa mengubahnya.


Linux
  1. Bagaimana Cara Menghapus Izin Jalankan Secara Rekursif Dari File Tanpa Menyentuh Folder?

  2. Cara menghapus aria2 dari Ubuntu

  3. Bagaimana cara menghapus file dari tempat sampah di Ubuntu?

  1. Hapus spasi putih dari nama file di Linux

  2. Bagaimana cara menghapus iso 9660 dari USB?

  3. Ganti nama banyak file untuk menghapus akhiran umum dari nama file

  1. Bagaimana cara menghapus garis yang muncul pada file B dari file A lainnya?

  2. Bagaimana cara menghapus VS Code &pengaturan dari Ubuntu?

  3. Bagaimana cara menghapus file ._ dalam direktori? Ubuntu