Özyinelemeli olarak yeniden adlandırın dosyaları bulmak ve sed kullanarak
Dizinleri bir sürü geçmesi ve _test ile biten tüm dosyaları yeniden adlandırmak istiyorum.rb _spec sonuna kadar.rb yerine. Hiç bir çaba çivilenmiş almak için koymak istedim bu sefer o kadar bash ile nasıl çözdüm bir şey. Şimdiye kadar, tüm çabalarıma rağmen artık gücüm yetmiyor:
find spec -name "*_test.rb" -exec echo mv {} `echo {} | sed s/test/spec/` \;
NOT: komut deniyorum ederken yerine basılı çalıştırmak için exec sonra ekstra bir yankı var.
Bunu çalıştırdığımda her eşleşen dosya için çıktı
mv original original
yani sed tarafından ikame kayboldu. Bu işin sırrı ne?
CEVAP
Bir şekilde en özgün sorun muhtemelen xargs "komut satırı" seçenek: . başına argümanlar kullanarak olurdu çözmek için
find . -name *_test.rb | sed -e "p;s/test/spec/" | xargs -n2 mv
Bulduğu dosya geçerli çalışma dizini özyinelemeli olarak, yankıları orijinal dosya adı (p
) ve daha sonra değiştirilmiş adı (s/test/spec/
) ve yemler tüm mv
çift (xargs -n2
). Bu durumda bir dize içerir kendisi olmamalı yolu 10* *dikkat edin.
Yinelemeli olarak kullanarak wget için...
't don dosyaları bulmak için grep...
Yinelemeli olarak kullanarak Emacs ve ...
Nasıl yinelemeli olarak bulmak ve alt ...
Özyinelemeli olarak bir Linux dizinind...