Dosya adlarındaki yeni satırları kaldır


9

Wget günlüklerini ekleyeceği dosya adını üreten bir PHP kodu var. 2000+ dosya oluşturdum, ama sorun onlarla çalışmakta sorun yaşıyorum çünkü PHP_EOLisminin bir parçası olarak koyarak bir hata yaptım , bu kod LF/line feed/%0Aisminde eklenecek

Bu dosya adı örneği (tarayıcı aracılığıyla erişildiğinde, / var / www / html üzerine konduğunda) uzantı adından önce olduğuna http://xxxx/wget_01_a%0a.txtdikkat edin%0a

Ben berbat ettim ve keşke tüm dosyaları arayacak bir yeniden adlandırma toplu iş var ve eğer bulursa line feed, satır besleme olmadan yeniden adlandırır böylece sadecehttp://xxxx/wget_01_a.txt

Bunu nasıl ele alacağımdan pek emin değilim çünkü lsmacundayken bu istenmeyen karakterle sınırlı olmayan tüm özel karakterler ?, sadece hedeflemek istediğim şey satır besleme.

Yanıtlar:


12

renameCentOS 6'nın sağladığı util-linux'un yardımcı programını kullanarak ve bash varsayarak:

rename $'\n' '' wget_*

Bu, listelenen dosyaların adlarından yeni satır karakterlerini silmeyi ister. İstediğinizi yaptığından emin olmak için küçük bir alt kümede denemenizi öneririz ( renameCentOS 7'de -vhangi değişiklikleri yaptığını gösteren bir anahtarı desteklediğini unutmayın ).

Bunun yerine Perl tabanlı bir dağıtım yapıyorsanız rename:

rename -n 's/\n//g' wget_*

Ve sonra -nyeniden adlandırma yapmak için olmadan çalıştırın .


kardeşim, hiçbir şey olmadı pastebin.com/NjMg8vTL Ben centos 6 kullanıyorum
arvil

Belki de sahip olduğunuz satır besleme karakteri aslında değil \nmi? Yankı gibi bir şey yapabilir misin *.txt | od -c, orada hangi gerçek yazdırılamaz karakterin olduğunu görüyoruz?
dhag


Herhangi bir nedenle önceki macununuzdaki dosya eşleşmediği sürece neyin yanlış olduğundan emin değilim *.txt(bu neden renameonu almadığını açıklar ). Eğer iki deseni txtde $'\n've yerine olarak ayarlarsanız, ''herhangi bir çıktı elde edersiniz? Echo $ '\ n' gerçekten iki satır basar mı?
Mart'ta

1
rename $'\r' '' wget_*Çalışması için kullanmak zorunda kaldım
rshdev

2

Yanıtlananlara dayanarak, find komutunu yeniden adlandır ile birleştirerek, geçerli klasör ve alt klasörde satır besleme içeren tüm dosyaları yeniden adlandırmak için genelleştirdim.

find -name $'*\n*' -exec rename  $'s|\n| |g' '{}' \;

Burada find komutu satır beslemesi içeren tüm dosyaları bulur ve rename komutu addaki her satır beslemesini bir boşlukla değiştirir.

Aynı şey satır başı (\ r) gibi sorunlu karakterler için de yapılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.