Karşılaştırmak istediğim benzer alt klasör yapılarına sahip iki klasörüm var. Örneğin:
A
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5
ve
B
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text
Ben gösteren herkes alt klasörleri listelemek istiyorum A
hangi bir içinde alt klasör için önek olan B
alt klasörler gelen ve listedeki B
sıra. Beklenen çıktı
child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing
İkincil bir gereklilik: Birden fazla eşleşme varsa B
, bir hata / uyarı vermelidir.
Benim çözümüm :
cd A
for f in `ls -d */`;
do
cd B;
new_dirs=(`ls -1d $f*`);
cd -;
if [ ${#new_dirs[@]} -eq 0 ]
then
## DO_Nothing
continue;
elif [ ${#new_dirs[@]} -gt 1 ]
then
echo "Multiple matches to $f";
continue;
else
echo "Unique Match found to $f -- ${new_dirs[0]}";
continue;
fi;
done
Sorun:
$f
Karşılık gelen alt klasörleri olmayan bu değerler B
için dizi yapısı bana bir hata veriyor. Örneğin:
ls: 'child-4 *' dosyasına erişemiyor: Böyle bir dosya veya dizin yok
Soru
- Bu hatalardan nasıl kurtulurum?
- Kodumdaki hedeflere ulaşmak için daha iyi bir yol var mı ?
Şimdiden teşekkürler!
diff -rq DIR1 DIR2
değil, yalnızca dizin yapısını değil dosya içeriğini karşılaştırmak için de kullanabilirsiniz .