Portál AbcLinuxu, 7. května 2025 01:23
VM_VMDK_DESCRS=$(ls "$OLDVMSTORE/$OLDVM" | grep ".vmdk" | grep -v "\-flat.vmdk") for VMDK in "${VM_VMDK_DESCRS}" do echo "Cloning VMDK : $VMDK" NEWVMDK=$(echo ${VMDK##*/} | sed "s/$OLDVM/$NEWVM/") vmkfstools -i "$OLDVMSTORE/$OLDVM/$VMDK" "$NEWVMSTORE/$NEWVM/$NEWVMDK" -d thin echoskript selže protože v té smyčce se mu objeví oba ty nalezené disky
ls /vmfs/volumes/datastore1/DSMON01 |grep ".vmdk" | gr ep -v "\-flat.vmdk" | hexdump -C 00000000 44 53 4d 4f 4e 30 31 2e 76 6d 64 6b 0a 44 53 4d |DSMON01.vmdk.DSM| 00000010 4f 4e 30 31 5f 31 2e 76 6d 64 6b 0a |ON01_1.vmdk.|Přičemž separátor je tady 0a což by měl být linefeed. Nevíte jak upravit ten for aby to začalo chodit? Zkoušel jsem přidat IFS=$'\n' ale nepomohlo to. Díky za každou radu.
Řešení dotazu:
sed "s/$OLDVM/$NEWVM/"Protoze, nahradis dvakrat to same..
for i in "abc def"; do echo $i; done
proběhne jednou a vypíše řetězec: abc def
for i in abc def; do echo $i; done
proběhne dvakrát a vypíše řetězce: abc a def
Když tak ale koukám na to řetězení ls a 2x grep. Tak spíše něco jako... for vdmk in "${OLDVMSTORE}/${OLDVM}"/*.vdmk*; do ...; done
. Ve smyčce můžete vyřídit případný -flat.vdmk (pokud substring, pak continue).
A ještě poznámka: ls | grep .vdmk
není ls *.vdmk*
(což jste asi chtěl), ale ls *?vdmk*
(což je spíše omyl?).
VM_VMDK_DESCRS=$(ls "$OLDVMSTORE/$OLDVM" | grep ".vmdk" | grep -v "\-flat.vmdk") for VMDK in ${VM_VMDK_DESCRS//\\n/ } do echo "Cloning VMDK : $VMDK" #echo "MEZERA" NEWVMDK=$(echo ${VMDK##*/} | sed "s/$OLDVM/$NEWVM/") vmkfstools -i "$OLDVMSTORE/$OLDVM/$VMDK" "$NEWVMSTORE/$NEWVM/$NEWVMDK" -d thin echo doneFunguje to. Díky všem.
${VM_VMDK_DESCRS//\\n/ }
), která na to nemá vliv, ale protože kolem ${VM_VMDK_DESCRS}
(s náhradou nebo bez) už nejsou uvozovky.
# tahle smycka pojede 3x protoze jde o 3 nezavisle vstupy for neco in jedna dva tri; do # tahle smycka pojede 1x protoze jde o 1 souvislej vstup for neco in "jedna dva tri"; doa je jedno jestli jde o vypsane vstupy primo ve smycce, nebo jde o promenou ktera je obsahuje
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.