UNIX find anahtar sözcüğüyle eşleşen birden fazla dosyayı yeniden adlandırma


2

Aşağıdaki dosyaları içeren dosyaları bulmak için find komutundan sahibim yyy adına:

./plonetheme/xxx/yyy-logo.png
./plonetheme/xxx/profiles/default/plonetheme.yyy_various.txt
./plonetheme/xxx/skins/plonetheme_yyy_custom_images
./plonetheme/xxx/skins/plonetheme_yyy_custom_images/CONTENT.txt
./plonetheme/xxx/skins/plonetheme_yyy_custom_templates
./plonetheme/xxx/skins/plonetheme_yyy_custom_templates/CONTENT.txt
./plonetheme/xxx/skins/plonetheme_yyy_custom_templates/main_template.pt
./plonetheme/xxx/skins/plonetheme_yyy_styles
./plonetheme/xxx/skins/plonetheme_yyy_styles/base_properties.props
./plonetheme/xxx/skins/plonetheme_yyy_styles/CONTENT.txt

Tüm dosyayı nasıl yeniden isimlendiririm ki yyy ile değiştirilir zzz?

Yanıtlar:


6

Kullanabilirsiniz bash string işlemi istediğini elde etmek için:

find PATH/PATTERN -exec bash -c 'mv "$0" "${0/yyy/zzz}"' {} \;

-exec switch komutu kaçışa kadar çalıştırır ;, nerede {} şu anda işlenmekte olan dosyanın yoludur.

bash -c 'mv "$0" "${0/cix/stix}"' {} bu yolu, bash'a argüman olarak geçirir. $0 (ilk tartışma, ör. ./plonetheme/xxx/yyy-logo.png ) için ${0/yyy/zzz} (manipüle edilen ilk argüman, ör. ./plonetheme/xxx/zzz-logo.png ).


2

Tarif edildiği gibi İşte , kullanabilirsiniz -print0 ve read -r -d'':

find /path/to/files -type f -print0 | while IFS= read -r -d '' file; do
    mv "$file" "${file/yyy/zzz}"
done
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.