Bir make işleminin parçası olarak adlandırılan bir bash betiği #!/usr/bin/env bash
var. Bu betik, bir gerçekleştirme ile ilgili dosyaları içeren bir dizin oluşturur ve daha sonra tar
s onları oluşturur. Dizinin bir kopyasını almak ve "en son" sözcüğü ile sürüm tanımlayıcısını değiştirmek için bazı dosyaları yeniden adlandırmak istiyorum. Bu, en son dosyanın bir web sunucusundan elde edilmesini betimlemeyi kolaylaştıracaktır. Komut dosyasını çalıştırdığımda, rename
numaralı çağrı hiçbir şey yapmıyor gibi görünüyor, neden bu? Ubuntu'daki bir bash komut dosyasından nasıl yeniden adlandırılır?
#!/usr/bin/env bash
DATE_NOW="$(date +'%Y%m%d')"
product_id_base="$1"
firmware_dir="${product_id_base}-full-${DATE_NOW}"
# ...rest of file ommitted to protest the innocent
# It creates and fills the ${firmware_dir} with some files that end in
# -$DATE_NOW.<extention> and I would like to rename the copies of them so that they end in
# -latest.<extention>
cp -a "./${firmware_dir}" "./${product_id_base}-full-latest"
# see what there is in pwd
cd "./${product_id_base}-full-latest"
list_output=`ls`
echo $list_output
# Things go OK until this point.
replacment="'s/${DATE_NOW}/latest/'"
rename_path=$(which rename)
echo $replacment
perl $rename_path -v $replacment *
echo $cmd
pwd
$cmd
echo "'s/-${DATE_NOW}/-latest/g'" "${product_id_base}-*"
echo $a
# check what has happened
list_output=`ls`
echo $list_output
Ben
./rename.sh product-id
yukarıda diyoruz ve mevcut çalışma dizini ben yeniden adlandırılmış istediğiniz dosyaların tam biridir gösterir
ls
beklenen çıkışı olsun.
$ ./rename.sh product-id ET-PIC-v1.1.dat ET-PIC-v1.1.hex
product-id-20160321.bin product-id-20160321.dat
product-id-20160321.elf product-id-20160321.gz 's/20160321/latest/'
/home/thomasthorne/work/product-id/build/product-id-full-latest
's/-20160321/-latest/g' product-id-*
ET-PIC-v1.1.dat ET-PIC-v1.1.hex product-id-20160321.bin
product-id-20160321.dat product-id-20160321.elf product-id-20160321.gz
Yeniden adlandırdığım bazı dosyalar yeniden adlandırıldı. Bir yeniden adlandırma işlevini doğrudan bir terminal öykünücüsünden aradığımda yeniden adlandırmayı görüyorum.
~/work/product-id/build/product-id-full-latest$ rename -vn
's/-20160321/-latest/g' * product-id-20160321.bin renamed as
product-id-latest.bin product-id-20160321.dat renamed as
product-id-latest.dat product-id-20160321.elf renamed as
product-id-latest.elf ...
Ben dizeleri kaçan `ya $() kullanarak komut satırından tüm değiştirmelerin uzaklaştırmaya birkaç varyasyonları çalıştılar. Şimdiye kadar hiçbir şey işe yaramadı, bu yüzden temel bir şey eksik olmalıyım.
#!/usr/bin/env bash
'un #!/bin/bash
gibi davrantığını okudum, bu yüzden oyunda olduğunu düşünmüyorum. Ubuntu ve Debian'ın yeniden adlandırma betiğinin farklı sürümlerini başka bazı dağıtımlara sahip olduğunu biliyorum ve Ubuntu'da koşuyorum. Bu, sadece yeniden adlandırmak yerine perl /usr/bin/rename ...
'u aramayı denememi sağladı ancak bu fark edilebilir bir fark yaratmadı.
emindim ben denemiş
Bu seferki perl olmadan, benim Ubuntu üzerinde çalıştı:
ile siz denediniz Geçen saatte yaptığım birçok permütasyon sırasında ama başarısız oldu. Şimdi denedim ve işe yarıyor! Şeyleri yeniden başlattığım zaman bile, her şeyle başladığım 'yeniden adlandıran -v' ler/$ {DATE_NOW}/en son/"*. Çözüm için teşekkürler. Son 2 saat boyunca ne yaptığımı bilmiyorum. – TafTSevindim Yardımcı olabilirim! – zezollo