Nasıl bir dizinde her dosya içinde 'php' ile 'php3' değiştiririm

3 Cevap php

Umarım güzel ve basit bir.

Ben php 5.2 üzerinde çalıştırmak istediğiniz bir php3 web sitesi var

Ben sadece mevcut "index.php3" _within_each_file_ için her başvuru olması isterim başlamak için (yinelemeli) "index.php" olarak değiştirildi ve daha sonra globalleri vb endişesi geçmek

K. git!

:)

Güncelleme: Çok teşekkürler! Benim soru referanslar bir web sitesinin her dosyasında ve tüm dosyalar / klasörler içinde ardışık bunu yapmak istedim aslında cevapsız biliyoruz.

3 Cevap

Nasıl hakkında:

for file in *.php3
do
    sed 's/\.php3/.php/g' $file > ${file%3}
done

Için / do / sırayla her. Php3 dosyası ile döngü fırsatlar, dosya düzenleme ve .php3 .php ile her dize yerine, ve something.php3 gelen şey dosyayı kopyalarken yapılır. php.

Added for amended question:

for file in $(find . -type f -name '*.php3' -print)
do
    sed 's/\.php3/.php/g' $file > ${file%3}
done

'-print' genellikle bu gün ihmal edilebilir, ancak tarihsel, makine çok zaman hiçbir varsayılan eylem (pre-POSIX) aslında yoktu çünkü eklemek unuttum insanlar tarafından heba edildi.

Bu fragman genişletilmiş görev yapmak için özgün kod basit değişiklik hakkında, ama mutlaka artık bunu yapmak için en iyi yol değildir - herhangi bir işleme önce dosyaları tüm listesini önceden oluşturur. Bunun yerine kullanabilirsiniz:

find . -type f -name '*.php3' -print |
while read file
do
    sed 's/\.php3/.php/g' $file > ${file%3}
done

Dosya isimleri ve yol isimleri boşluklar veya satırsonlarını ya da diğer karakterleri içerebilir Ancak, her ikisi de tadil versiyonları sorunlarla çalıştırabilirsiniz. Bu tür sorunları önlemek için, daha çok çalışmak zorunda - Perl kullanarak veya (GNU + xargs bulmak) veya diğer bazı teknikler. Eğer aklı başında iseniz, bu tür sorunları önlemek. Tamamen aklı başında kurulum daha az miras ettiyseniz, o zaman Unix dosya adı işleme sır daha derin defterleri gerekebilir.

sed -i 's/php3/php/g' *

Bir Unix-benzeri bir işletim sistemi kullanıyorsanız varsayarsak.

Yinelemeli bunu Jonathan'ın cevabı kullanabilirsiniz ama yerine find . -type f *. Php3 için için. Geri keneler önemli ve sizin için herhangi bir dizin yerine unutmayın "." (Yani geçerli dizin). Burada da süreci dosyası (.. -> * Php * php3) adlandırır bir sürümüdür.

#!/bin/bash
for file in `find . -type f`
do
    sed 's/\.php3/\.php/g' $file > ${file//3/}
    rm $file
done