Bagaimana saya bisa mengganti nama semua file dalam direktori tertentu di mana file berisi spasi kosong dan karakter khusus ($ dan @) dalam nama mereka?
Saya mencoba rename
perintah sebagai berikut untuk mengganti semua spasi dan karakter khusus dengan _:
$ ls -lrt
total 464
-rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv
$ rename -n 's/ |\$|@/_/g' *
$ ls -lrt
total 464
-rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv
$
Perintah ini berfungsi tetapi tidak akan membuat perubahan apa pun dalam nama file dan tidak akan mengembalikan kesalahan apa pun juga. Bagaimana cara memperbaikinya dan apakah ada cara lain juga?
linux
shell-script
rename
Ankit Vashistha
sumber
sumber
Jawaban:
The
-n
bendera untukJadi normal jika Anda tidak memiliki perubahan.
Mengenai perintah Anda, itu berfungsi untuk saya:
Mungkin tergantung pada cangkang Anda, Anda harus melarikan diri |
Atau Anda dapat menggunakan
[…]
notasi untuk mengelompokkan karakter:sumber
rename -n 's/./_/g' *
menghasilkan sesuatu?Anda dapat mencoba seperti ini:
Jika Anda puas dengan hasilnya, hapus
echo
sebelummv
untuk benar-benar mengganti nama file.sumber
mencari skrip yang ganteng untuk menghapus karakter khusus serta karakter khusus Jerman, menggantikannya dengan yang universal untuk tidak menghapus informasi yang berguna. Saya telah memperbarui versi terakhir dari skrip yang memiliki beberapa masalah kecil yang mengakibatkan:
yang menghasilkan:
@don_crissti: Dia melakukan hokus-pokus dengan infile karena linux akan memiliki masalah sendiri dengan penanganan karakter khusus ketika memindahkan nama file.
sumber
Karena
rename
perintah itu tidak berfungsi untuk saya karena alasan yang tidak diketahui dan saya tidak mendapatkan jawaban lain untuk pertanyaan saya, saya sendiri mencoba melakukan upaya untuk membuat penggantian nama menjadi mungkin. Ini mungkin bukan pendekatan terbaik untuk mengubah nama file tetapi berhasil bagi saya dan inilah mengapa saya ingin mempostingnya sebagai jawaban sehingga jika orang lain membaca ini mungkin mendapatkan bantuan untuk mengubah nama file seperti yang saya lakukan.Sekarang bagi saya, saya tahu bahwa semua file akan memiliki teks tertentu dalam nama mereka yang merupakan kata "Blokir". Berikut ini adalah nama file sebelum penggantian nama dilakukan:
Sekarang saya telah menulis skrip shell kecil untuk memungkinkan ini. Berikut ini adalah kode:
Dan itu saja, ketika saya menjalankan skrip, itu mengubah nama semua nama file yang memiliki spasi kosong (
)
$
atau@
dengan_
alih - alih karakter ini.sumber
cat foo | sed S1 | sed S2 | sed S3 >> bar
dengansed -e S1 -e S2 -e S3 foo >> bar
sed 's/[ ()@$]/_/g'
ataused 'y/ ()@$/_____/'
Yang ini hanya menghapus karakter khusus dari nama file
menempatkan
echo
setelah; do
tes sebelumnya, seperti:Solusi lain:
-n
pilihan untuk menguji sebelumnya.sumber
Saya telah mencari solusi untuk masalah ini untuk sementara waktu sekarang. Saya bekerja pada sistem tertutup lama yang tidak dapat menginstal paket baru. Saya tidak punya
rename
perintah. Akhirnya saya menulis skrip yang tampaknya berfungsi dengan semua keyboard memasukkan karakter khusus.~@#$%^&*()-_=+[]{}\|;:",<.>?'
Script akan mengganti nama setiap file dan direktori di direktori saat ini. Itu akan menggantikan semua karakter khusus, kecuali-_.
dengan_
karakter. Theoutfile=
garis dapat dimodifikasi untuk menggunakan karakter yang berbeda untuk penggantian jika diinginkan. Ganti|_|
dengan|.|
menggunakan.
karakter misalnya.sumber
Bagi saya di Ubuntu 18.04 LTS dengan bash 4.4.20 (1) - lepaskan one-liner ini bekerja dengan baik untuk menghilangkan spasi, @,: # ...
Untuk menguji (perhatikan
echo
perintah:Untuk mengeksekusi:
sumber