Dosya ve klasörleri yeniden adlandır find -execdir | rename
Hem dosyaları hem de dizinleri sadece bir sonek ile değil, yeniden adlandıracaksanız, bu iyi bir kalıptır:
PATH="$(echo "$PATH" | sed -E 's/(^|:)[^\/][^:]*//g')" \
find . -depth -execdir rename 's/findme/replaceme/' '{}' \;
Awesome -execdirseçeneği cd, renamekomutu çalıştırmadan önce dizine a yapar -exec.
-depth eksik ebeveyn dizinleri ile ilgili olası sorunları önlemek için yeniden adlandırma işleminin önce çocuklar üzerinde, sonra ebeveynler üzerinde yapıldığından emin olun.
-execdir Yeniden adlandırma, temel ad değil giriş yollarıyla iyi çalışmadığından, örneğin aşağıdakilerin başarısız olması gerekir:
rename 's/findme/replaceme/g' acc/acc
Bilgisayar PATHkorsanlığı gereklidir, çünkü -execdirçok can sıkıcı bir dezavantajı vardır: findson derece tartışılır ve ortam değişkeninizde -execdirgöreceli yollarınız varsa PATH, örneğin ./node_modules/.bin:
find: './node_modules/.bin' göreceli yolu, find -execdir eylemiyle birlikte güvensiz olan PATH ortam değişkenine dahil edilir. Lütfen bu girişi $ PATH içinden kaldırın
Ayrıca bakınız: /ubuntu/621132/why-using-the-execdir-action-is-insecure-for-directory-which-is-in-the-path/1109378#1109378
-execdirPOSIX için bir GNU bulma uzantısıdır . renamePerl tabanlıdır ve renamepaketten gelir . Ubuntu 18.10'da test edilmiştir.
Lookahead geçici çözümünü yeniden adlandır
Girdi yollarınız gelmiyorsa findveya göreceli yol sıkıntısından yeterince kurtulduysanız, dizinleri aşağıdaki gibi güvenli bir şekilde yeniden adlandırmak için bazı Perl görünümlerini kullanabiliriz:
git ls-files | sort -r | xargs rename 's/findme(?!.*\/)\/?$/replaceme/g' '{}'
Ben için uygun bir analog bulamadık -execdirile xargs: Xargs: değişim yürütmeden önce dosya yoluna dizini çalışma?
sort -rUzun yollar aynı öneki ile kısa olanlar sonra gel beri dosyaları kendi dizinleri sonra gelmek sağlamak için gereklidir.
renameveya Red Hat varrenamemı?