Folder comparison












8















I have two folders with similar subfolder structures, which I would like to compare. For example:



A 
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5


and



B 
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text


I would like to list all those subfolders from A which are prefix for a subfolder in B and list corresponding subfolders from B as well. The expected output is



child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing


A secondary requirement: If multiple matches in B, then it should give an error / warning.



My solution:



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


Problem:



For those values of $f, which have no corresponding subfolders in B, the array construction is giving me an error. e.g.:




ls: cannot access 'child-4*': No such file or directory




Question




  • How to get rid of these errors?

  • Is there better way to achieve the goal(s) then the one in my code?


Thanks in advance!










share|improve this question




















  • 3





    +1 for providing an almost working solution!

    – user5325
    yesterday
















8















I have two folders with similar subfolder structures, which I would like to compare. For example:



A 
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5


and



B 
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text


I would like to list all those subfolders from A which are prefix for a subfolder in B and list corresponding subfolders from B as well. The expected output is



child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing


A secondary requirement: If multiple matches in B, then it should give an error / warning.



My solution:



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


Problem:



For those values of $f, which have no corresponding subfolders in B, the array construction is giving me an error. e.g.:




ls: cannot access 'child-4*': No such file or directory




Question




  • How to get rid of these errors?

  • Is there better way to achieve the goal(s) then the one in my code?


Thanks in advance!










share|improve this question




















  • 3





    +1 for providing an almost working solution!

    – user5325
    yesterday














8












8








8


0






I have two folders with similar subfolder structures, which I would like to compare. For example:



A 
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5


and



B 
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text


I would like to list all those subfolders from A which are prefix for a subfolder in B and list corresponding subfolders from B as well. The expected output is



child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing


A secondary requirement: If multiple matches in B, then it should give an error / warning.



My solution:



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


Problem:



For those values of $f, which have no corresponding subfolders in B, the array construction is giving me an error. e.g.:




ls: cannot access 'child-4*': No such file or directory




Question




  • How to get rid of these errors?

  • Is there better way to achieve the goal(s) then the one in my code?


Thanks in advance!










share|improve this question
















I have two folders with similar subfolder structures, which I would like to compare. For example:



A 
├── child-1
├── child-2
├── child-3
├── child-4
├── child-5


and



B 
├── child-1-some-text
├── child-2-more-text
├── child-3-nothing
├── child-6-random-text
├── child-7-more-random-text


I would like to list all those subfolders from A which are prefix for a subfolder in B and list corresponding subfolders from B as well. The expected output is



child-1 -- child-1-some-text
child-2 -- child-2-more-text
child-3 -- child-3-nothing


A secondary requirement: If multiple matches in B, then it should give an error / warning.



My solution:



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


Problem:



For those values of $f, which have no corresponding subfolders in B, the array construction is giving me an error. e.g.:




ls: cannot access 'child-4*': No such file or directory




Question




  • How to get rid of these errors?

  • Is there better way to achieve the goal(s) then the one in my code?


Thanks in advance!







bash directory






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited yesterday









wjandrea

9,45042664




9,45042664










asked yesterday









Mike V.D.C.Mike V.D.C.

3051211




3051211








  • 3





    +1 for providing an almost working solution!

    – user5325
    yesterday














  • 3





    +1 for providing an almost working solution!

    – user5325
    yesterday








3




3





+1 for providing an almost working solution!

– user5325
yesterday





+1 for providing an almost working solution!

– user5325
yesterday










2 Answers
2






active

oldest

votes


















7














The better way



Don't parse ls; use globs instead. In fact you're already using globs, just wrapping them in ls, which is pointless. You just need nullglob turned on for when there are no matches.



Also avoiding cd simplifies things.



#!/bin/bash

shopt -s nullglob

dir1=A
dir2=B

for dir in "$dir1"/*/; do
basename="$(basename -- "$dir")"
dirs_match=( "$dir2/$basename"*/ )
case ${#dirs_match[@]} in
0)
;;
1)
echo "Unique match for $dir: ${dirs_match[*]}"
;;
*)
echo "Multiple matches for $dir: ${dirs_match[*]}" >&2
;;
esac
done


Output:



Unique match for A/child-1/: B/child-1-some-text/
Unique match for A/child-2/: B/child-2-more-text/
Multiple matches for A/child-3/: B/child-3-nothing/ B/child-3-something/


I added B/child-3-something to test the secondary requirement. This creates the directory structure for testing:



mkdir -p A/child-{1..5} B/child-{1-some-text,2-more-text,3-nothing,3-something,6-random-text,7-more-random-text}


By the way, ShellCheck is very useful for finding problems in shell scripts.






share|improve this answer


























  • ShellCheck.net is interesting, do you know if it uploads everything to it's own servers, or is it all done locally? Just wondering about the privacy of entered info. [Installing the shellcheck package would be the most secure]

    – Xen2050
    yesterday













  • @Xen2050 Just tried toggling my internet off while on the site, and it seems to upload. I would imagine it doesn't keep it, but not sure. And yes the package is good; I use an Atom plugin that uses it.

    – wjandrea
    yesterday













  • Thanks for the suggestions. And also tons of thanks for pointing towards ShellCheck. I loved the part where it not only tells you your errors, but also gives suggestions! @Xen2050, about the uploading part, I just installed shellcheck using apt and then disabled network. It seems to be working without internet.

    – Mike V.D.C.
    22 hours ago



















2














Calling ls on a non existent folder throws the error message that you encountered. The easy way is to just ignore this by replacing line 5 in your script with this: new_dirs=(`ls -1d $f* 2> /dev/null`);.






share|improve this answer
























  • Have you tested this? Stderr seems to get ignored by default, when I run t=(`echo ok; echo err 1>&2`) $t (or ${t[@]}) only contains ok, err is seen in the terminal but not saved anyway. Or is there something funny about my test?

    – Xen2050
    4 hours ago













Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "89"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1128280%2ffolder-comparison%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









7














The better way



Don't parse ls; use globs instead. In fact you're already using globs, just wrapping them in ls, which is pointless. You just need nullglob turned on for when there are no matches.



Also avoiding cd simplifies things.



#!/bin/bash

shopt -s nullglob

dir1=A
dir2=B

for dir in "$dir1"/*/; do
basename="$(basename -- "$dir")"
dirs_match=( "$dir2/$basename"*/ )
case ${#dirs_match[@]} in
0)
;;
1)
echo "Unique match for $dir: ${dirs_match[*]}"
;;
*)
echo "Multiple matches for $dir: ${dirs_match[*]}" >&2
;;
esac
done


Output:



Unique match for A/child-1/: B/child-1-some-text/
Unique match for A/child-2/: B/child-2-more-text/
Multiple matches for A/child-3/: B/child-3-nothing/ B/child-3-something/


I added B/child-3-something to test the secondary requirement. This creates the directory structure for testing:



mkdir -p A/child-{1..5} B/child-{1-some-text,2-more-text,3-nothing,3-something,6-random-text,7-more-random-text}


By the way, ShellCheck is very useful for finding problems in shell scripts.






share|improve this answer


























  • ShellCheck.net is interesting, do you know if it uploads everything to it's own servers, or is it all done locally? Just wondering about the privacy of entered info. [Installing the shellcheck package would be the most secure]

    – Xen2050
    yesterday













  • @Xen2050 Just tried toggling my internet off while on the site, and it seems to upload. I would imagine it doesn't keep it, but not sure. And yes the package is good; I use an Atom plugin that uses it.

    – wjandrea
    yesterday













  • Thanks for the suggestions. And also tons of thanks for pointing towards ShellCheck. I loved the part where it not only tells you your errors, but also gives suggestions! @Xen2050, about the uploading part, I just installed shellcheck using apt and then disabled network. It seems to be working without internet.

    – Mike V.D.C.
    22 hours ago
















7














The better way



Don't parse ls; use globs instead. In fact you're already using globs, just wrapping them in ls, which is pointless. You just need nullglob turned on for when there are no matches.



Also avoiding cd simplifies things.



#!/bin/bash

shopt -s nullglob

dir1=A
dir2=B

for dir in "$dir1"/*/; do
basename="$(basename -- "$dir")"
dirs_match=( "$dir2/$basename"*/ )
case ${#dirs_match[@]} in
0)
;;
1)
echo "Unique match for $dir: ${dirs_match[*]}"
;;
*)
echo "Multiple matches for $dir: ${dirs_match[*]}" >&2
;;
esac
done


Output:



Unique match for A/child-1/: B/child-1-some-text/
Unique match for A/child-2/: B/child-2-more-text/
Multiple matches for A/child-3/: B/child-3-nothing/ B/child-3-something/


I added B/child-3-something to test the secondary requirement. This creates the directory structure for testing:



mkdir -p A/child-{1..5} B/child-{1-some-text,2-more-text,3-nothing,3-something,6-random-text,7-more-random-text}


By the way, ShellCheck is very useful for finding problems in shell scripts.






share|improve this answer


























  • ShellCheck.net is interesting, do you know if it uploads everything to it's own servers, or is it all done locally? Just wondering about the privacy of entered info. [Installing the shellcheck package would be the most secure]

    – Xen2050
    yesterday













  • @Xen2050 Just tried toggling my internet off while on the site, and it seems to upload. I would imagine it doesn't keep it, but not sure. And yes the package is good; I use an Atom plugin that uses it.

    – wjandrea
    yesterday













  • Thanks for the suggestions. And also tons of thanks for pointing towards ShellCheck. I loved the part where it not only tells you your errors, but also gives suggestions! @Xen2050, about the uploading part, I just installed shellcheck using apt and then disabled network. It seems to be working without internet.

    – Mike V.D.C.
    22 hours ago














7












7








7







The better way



Don't parse ls; use globs instead. In fact you're already using globs, just wrapping them in ls, which is pointless. You just need nullglob turned on for when there are no matches.



Also avoiding cd simplifies things.



#!/bin/bash

shopt -s nullglob

dir1=A
dir2=B

for dir in "$dir1"/*/; do
basename="$(basename -- "$dir")"
dirs_match=( "$dir2/$basename"*/ )
case ${#dirs_match[@]} in
0)
;;
1)
echo "Unique match for $dir: ${dirs_match[*]}"
;;
*)
echo "Multiple matches for $dir: ${dirs_match[*]}" >&2
;;
esac
done


Output:



Unique match for A/child-1/: B/child-1-some-text/
Unique match for A/child-2/: B/child-2-more-text/
Multiple matches for A/child-3/: B/child-3-nothing/ B/child-3-something/


I added B/child-3-something to test the secondary requirement. This creates the directory structure for testing:



mkdir -p A/child-{1..5} B/child-{1-some-text,2-more-text,3-nothing,3-something,6-random-text,7-more-random-text}


By the way, ShellCheck is very useful for finding problems in shell scripts.






share|improve this answer















The better way



Don't parse ls; use globs instead. In fact you're already using globs, just wrapping them in ls, which is pointless. You just need nullglob turned on for when there are no matches.



Also avoiding cd simplifies things.



#!/bin/bash

shopt -s nullglob

dir1=A
dir2=B

for dir in "$dir1"/*/; do
basename="$(basename -- "$dir")"
dirs_match=( "$dir2/$basename"*/ )
case ${#dirs_match[@]} in
0)
;;
1)
echo "Unique match for $dir: ${dirs_match[*]}"
;;
*)
echo "Multiple matches for $dir: ${dirs_match[*]}" >&2
;;
esac
done


Output:



Unique match for A/child-1/: B/child-1-some-text/
Unique match for A/child-2/: B/child-2-more-text/
Multiple matches for A/child-3/: B/child-3-nothing/ B/child-3-something/


I added B/child-3-something to test the secondary requirement. This creates the directory structure for testing:



mkdir -p A/child-{1..5} B/child-{1-some-text,2-more-text,3-nothing,3-something,6-random-text,7-more-random-text}


By the way, ShellCheck is very useful for finding problems in shell scripts.







share|improve this answer














share|improve this answer



share|improve this answer








edited yesterday

























answered yesterday









wjandreawjandrea

9,45042664




9,45042664













  • ShellCheck.net is interesting, do you know if it uploads everything to it's own servers, or is it all done locally? Just wondering about the privacy of entered info. [Installing the shellcheck package would be the most secure]

    – Xen2050
    yesterday













  • @Xen2050 Just tried toggling my internet off while on the site, and it seems to upload. I would imagine it doesn't keep it, but not sure. And yes the package is good; I use an Atom plugin that uses it.

    – wjandrea
    yesterday













  • Thanks for the suggestions. And also tons of thanks for pointing towards ShellCheck. I loved the part where it not only tells you your errors, but also gives suggestions! @Xen2050, about the uploading part, I just installed shellcheck using apt and then disabled network. It seems to be working without internet.

    – Mike V.D.C.
    22 hours ago



















  • ShellCheck.net is interesting, do you know if it uploads everything to it's own servers, or is it all done locally? Just wondering about the privacy of entered info. [Installing the shellcheck package would be the most secure]

    – Xen2050
    yesterday













  • @Xen2050 Just tried toggling my internet off while on the site, and it seems to upload. I would imagine it doesn't keep it, but not sure. And yes the package is good; I use an Atom plugin that uses it.

    – wjandrea
    yesterday













  • Thanks for the suggestions. And also tons of thanks for pointing towards ShellCheck. I loved the part where it not only tells you your errors, but also gives suggestions! @Xen2050, about the uploading part, I just installed shellcheck using apt and then disabled network. It seems to be working without internet.

    – Mike V.D.C.
    22 hours ago

















ShellCheck.net is interesting, do you know if it uploads everything to it's own servers, or is it all done locally? Just wondering about the privacy of entered info. [Installing the shellcheck package would be the most secure]

– Xen2050
yesterday







ShellCheck.net is interesting, do you know if it uploads everything to it's own servers, or is it all done locally? Just wondering about the privacy of entered info. [Installing the shellcheck package would be the most secure]

– Xen2050
yesterday















@Xen2050 Just tried toggling my internet off while on the site, and it seems to upload. I would imagine it doesn't keep it, but not sure. And yes the package is good; I use an Atom plugin that uses it.

– wjandrea
yesterday







@Xen2050 Just tried toggling my internet off while on the site, and it seems to upload. I would imagine it doesn't keep it, but not sure. And yes the package is good; I use an Atom plugin that uses it.

– wjandrea
yesterday















Thanks for the suggestions. And also tons of thanks for pointing towards ShellCheck. I loved the part where it not only tells you your errors, but also gives suggestions! @Xen2050, about the uploading part, I just installed shellcheck using apt and then disabled network. It seems to be working without internet.

– Mike V.D.C.
22 hours ago





Thanks for the suggestions. And also tons of thanks for pointing towards ShellCheck. I loved the part where it not only tells you your errors, but also gives suggestions! @Xen2050, about the uploading part, I just installed shellcheck using apt and then disabled network. It seems to be working without internet.

– Mike V.D.C.
22 hours ago













2














Calling ls on a non existent folder throws the error message that you encountered. The easy way is to just ignore this by replacing line 5 in your script with this: new_dirs=(`ls -1d $f* 2> /dev/null`);.






share|improve this answer
























  • Have you tested this? Stderr seems to get ignored by default, when I run t=(`echo ok; echo err 1>&2`) $t (or ${t[@]}) only contains ok, err is seen in the terminal but not saved anyway. Or is there something funny about my test?

    – Xen2050
    4 hours ago


















2














Calling ls on a non existent folder throws the error message that you encountered. The easy way is to just ignore this by replacing line 5 in your script with this: new_dirs=(`ls -1d $f* 2> /dev/null`);.






share|improve this answer
























  • Have you tested this? Stderr seems to get ignored by default, when I run t=(`echo ok; echo err 1>&2`) $t (or ${t[@]}) only contains ok, err is seen in the terminal but not saved anyway. Or is there something funny about my test?

    – Xen2050
    4 hours ago
















2












2








2







Calling ls on a non existent folder throws the error message that you encountered. The easy way is to just ignore this by replacing line 5 in your script with this: new_dirs=(`ls -1d $f* 2> /dev/null`);.






share|improve this answer













Calling ls on a non existent folder throws the error message that you encountered. The easy way is to just ignore this by replacing line 5 in your script with this: new_dirs=(`ls -1d $f* 2> /dev/null`);.







share|improve this answer












share|improve this answer



share|improve this answer










answered yesterday









cauoncauon

1,6341021




1,6341021













  • Have you tested this? Stderr seems to get ignored by default, when I run t=(`echo ok; echo err 1>&2`) $t (or ${t[@]}) only contains ok, err is seen in the terminal but not saved anyway. Or is there something funny about my test?

    – Xen2050
    4 hours ago





















  • Have you tested this? Stderr seems to get ignored by default, when I run t=(`echo ok; echo err 1>&2`) $t (or ${t[@]}) only contains ok, err is seen in the terminal but not saved anyway. Or is there something funny about my test?

    – Xen2050
    4 hours ago



















Have you tested this? Stderr seems to get ignored by default, when I run t=(`echo ok; echo err 1>&2`) $t (or ${t[@]}) only contains ok, err is seen in the terminal but not saved anyway. Or is there something funny about my test?

– Xen2050
4 hours ago







Have you tested this? Stderr seems to get ignored by default, when I run t=(`echo ok; echo err 1>&2`) $t (or ${t[@]}) only contains ok, err is seen in the terminal but not saved anyway. Or is there something funny about my test?

– Xen2050
4 hours ago




















draft saved

draft discarded




















































Thanks for contributing an answer to Ask Ubuntu!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1128280%2ffolder-comparison%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Masuk log Menu navigasi

Identifying “long and narrow” polygons in with PostGISlength and width of polygonWhy postgis st_overlaps reports Qgis' “avoid intersections” generated polygon as overlapping with others?Adjusting polygons to boundary and filling holesDrawing polygons with fixed area?How to remove spikes in Polygons with PostGISDeleting sliver polygons after difference operation in QGIS?Snapping boundaries in PostGISSplit polygon into parts adding attributes based on underlying polygon in QGISSplitting overlap between polygons and assign to nearest polygon using PostGIS?Expanding polygons and clipping at midpoint?Removing Intersection of Buffers in Same Layers

Старые Смолеговицы Содержание История | География | Демография | Достопримечательности | Примечания | НавигацияHGЯOLHGЯOL41 206 832 01641 606 406 141Административно-территориальное деление Ленинградской области«Переписная оброчная книга Водской пятины 1500 года», С. 793«Карта Ингерманландии: Ивангорода, Яма, Копорья, Нотеборга», по материалам 1676 г.«Генеральная карта провинции Ингерманландии» Э. Белинга и А. Андерсина, 1704 г., составлена по материалам 1678 г.«Географический чертёж над Ижорскою землей со своими городами» Адриана Шонбека 1705 г.Новая и достоверная всей Ингерманландии ланткарта. Грав. А. Ростовцев. СПб., 1727 г.Топографическая карта Санкт-Петербургской губернии. 5-и верстка. Шуберт. 1834 г.Описание Санкт-Петербургской губернии по уездам и станамСпецкарта западной части России Ф. Ф. Шуберта. 1844 г.Алфавитный список селений по уездам и станам С.-Петербургской губернииСписки населённых мест Российской Империи, составленные и издаваемые центральным статистическим комитетом министерства внутренних дел. XXXVII. Санкт-Петербургская губерния. По состоянию на 1862 год. СПб. 1864. С. 203Материалы по статистике народного хозяйства в С.-Петербургской губернии. Вып. IX. Частновладельческое хозяйство в Ямбургском уезде. СПб, 1888, С. 146, С. 2, 7, 54Положение о гербе муниципального образования Курское сельское поселениеСправочник истории административно-территориального деления Ленинградской области.Топографическая карта Ленинградской области, квадрат О-35-23-В (Хотыницы), 1930 г.АрхивированоАдминистративно-территориальное деление Ленинградской области. — Л., 1933, С. 27, 198АрхивированоАдминистративно-экономический справочник по Ленинградской области. — Л., 1936, с. 219АрхивированоАдминистративно-территориальное деление Ленинградской области. — Л., 1966, с. 175АрхивированоАдминистративно-территориальное деление Ленинградской области. — Лениздат, 1973, С. 180АрхивированоАдминистративно-территориальное деление Ленинградской области. — Лениздат, 1990, ISBN 5-289-00612-5, С. 38АрхивированоАдминистративно-территориальное деление Ленинградской области. — СПб., 2007, с. 60АрхивированоКоряков Юрий База данных «Этно-языковой состав населённых пунктов России». Ленинградская область.Административно-территориальное деление Ленинградской области. — СПб, 1997, ISBN 5-86153-055-6, С. 41АрхивированоКультовый комплекс Старые Смолеговицы // Электронная энциклопедия ЭрмитажаПроблемы выявления, изучения и сохранения культовых комплексов с каменными крестами: по материалам работ 2016-2017 гг. в Ленинградской области