Portál AbcLinuxu, 28. prosince 2025 09:14
count_patch=1
for i in $patch/*.patch
do
if [ -f "$i" ]; then
patch[$count_patch]=$(basename "$i" .patch)
echo ${patch[$count_patch]}
((count_patch+=1))
amount_patch=$count_patch
fi
done
echo $amount_patch
count_source2=1
for i in $po_kde4_new/*.1
do
if [ -f "$i" ]; then
source2[$count_source2]=$(basename "$i" .1)
echo ${source2[$count_source2]}
((count_source2+=1))
amount_source2=$count_source2
fi
done
echo $amount_source2
count_source1=1
for i in $po_kde3_new/*.1
do
if [ -f "$i" ]; then
source1[$count_source1]=$(basename "$i" .1)
echo ${source1[$count_source1]}
((count_source1+=1))
amount_source1=$count_source1
fi
done
while [ $amount_patch -gt 0 ]
do
amount_source1=$count_source1
echo $amount_source1
while [ $amount_source1 -gt 0 ]
do
amount_source1=$count_source1
if [[ $(echo ${patch[$count_patch]}) = $(echo ${source1[$count_source1]}) ]]; then
amount_source2=$count_source2
while [ $amount_source2 -gt 0 ]
do
if [[ $(echo ${source1[$count_source1]}) != $(echo ${source2[$count_source2]}) ]]; then
cp ${source1[$count_source1]}.1 ${patch[$count_patch]}.patch $skladiste
fi
((amount_source2-=1))
done
fi
((amount_source1-=1))
done
((amount_patch-=1))
done
Je tam dost chyb.
Mimo jine nevim, jak zajistit aby byla dodrzena podminka, ze soubor o stejnem nazvu nesmi byt v "source2". To co tam mam je vylozene blbe.
Navic mi pri porovnani tech array vraci obe polozky prazdny retezec.
Nemuzete mi poradit, jak to zprovoznit? Pres array to byt nemusi. Jde mi spis o funkcnost a nic lepsiho me nenapadlo.
Dekuju za jakoukoliv radu.
#!/bin/sh
PATCH=./patch
SRC1=./src1
SRC2=./src2
IFS=$'\n'
patchs=( $(find "$PATCH" -type f -name "*.patch" -print0 | xargs -0 -n 1 -i basename '{}' .patch ) )
srcs1=( $(find "$SRC1" -type f -name "*.c" -print0 | xargs -0 -n 1 -i basename '{}' .c ) )
srcs2=( $(find "$SRC2" -type f -name "*.c" -print0 | xargs -0 -n 1 -i basename '{}' .c ) )
# echo "${#srcs1[*]}"
# echo "${srcs1[*]}"
# subory, ktore su v SRC1 a aj v SRC2
tmp1=( $(echo -e "${srcs1[*]}\n${srcs2[*]}" | sort | uniq -d) )
# echo "${#tmp1[*]}"
# echo "${tmp1[*]}"
# subory, ktore su v SRC1, ale nie su v SRC2
tmp2=( $(echo -e "${srcs1[*]}\n${tmp1[*]}\n${tmp1[*]}" | sort | uniq -u) )
# echo "${#tmp2[*]}"
# echo "${tmp2[*]}"
# subory, ktore su v PATCH a SRC1
tmp3=( $(echo -e "${patchs[*]}\n${tmp2[*]}" | sort | uniq -d) )
echo "${#tmp3[*]}"
echo "${tmp3[*]}"
echo "${tmp3[*]}" (teda len názov súboru, ale nie je problém tomu pridať adresár a príponu).
Ja som mal skôr na mysli to, že ak tie názvy súborov budú obsahovať znak "\n", tak to nebude fungovať (a asi si to neporadí ani s veľmi veľkým počtom súborov).
for i in ${tmp3[*]}
do
echo "$PATCH/$i.patch"
echo "$SRC1/$i.c"
done
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.