abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 1
včera 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 26
včera 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 7
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 14
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 25
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 15
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 5
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 1
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 774 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Bash - Porovnávávaní adresářů. Dotaz

4.10.2009 00:58 John
Bash - Porovnávávaní adresářů. Dotaz
Přečteno: 872×
Ahoj , potřeboval bych při porovnávání dvou adresářů vypsat soubory a adresáře, které se v jednom nebo druhém adresáři nevyskytují. A jestli by to šlo tak nejak přimo, ne přes pomocný soubor nebo tak. Diky

Řešení dotazu:


Odpovědi

Jendа avatar 4.10.2009 01:44 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
(ls -1 a; ls -1 b)|sort|uniq -c|grep -vE "^      2"
(ale možná někoho napadne něco elegantnějšího)
4.10.2009 01:55 John
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Pekne dekuji moc a slo by to nejak aby se zobrazilo i jaka slozka ten soubor ci adresar obsahuje. Jestli je to a nebo b.
Jendа avatar 4.10.2009 02:04 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
for NAME in `(ls -1 a; ls -1 b)|sort|uniq -c|grep -vE "^      2"|sed 's/      1 //g'`; do find . -name $NAME; done
(občas si říkám, jestli skutečně jsem takového prasení schopen ;)
Jendа avatar 4.10.2009 02:10 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Jo a možná uvozovky a stříška (začátek řádku)
for NAME in `(ls -1 a; ls -1 b)|sort|uniq -c|grep -vE "^      2"|sed 's/^      1 //g'`; do find . -name "$NAME"; done
kdyby jméno souboru obsahovalo divoké znaky a sekvenci " 1 ".
4.10.2009 05:25 kuly
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Teda, takovy pedant, ze ls zbytecne napise s -1 a find tak zprasi :)
4.10.2009 02:25 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
diff <(ls dir1) <(ls dir2)
4.10.2009 02:29 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Tedy diff i ls již striktně vzato nesplňují zadání "v BASHi". Ale pokud to vezmete trochu utilitaristicky, tak takhle by to taky šlo (a je to méně pracné).
4.10.2009 02:50 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Takže ještě pro úplnost, opravdu jen v BASHi (jistě lze ještě upravit a vylepšit a napsat lépe):
DIR1="dir1"
DIR2="dir2"

this_dir_only()
{
   cd "${1}" || return 1
   echo "Pouze v: ${1}"
   for obj in *
      do [ -e "../${2}/${obj}" ] || echo $obj
   done
   cd ..
   echo
}

this_dir_only "${DIR1}" "${DIR2}"
this_dir_only "${DIR2}" "${DIR1}"
21.3.2013 09:06 Makr
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Mohla bych se zeptat, jak by to šlo upravit, aby to vypisovalo u každého souboru, kde je vč. toho, když se soubor nachází v obou složkách?
22.3.2013 00:53 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Výše uvedenou funkci se mi zkoumat nechce, ale vyčerpávající výstup vám dá třeba:
diff -rusq adresář1 adresář2
a výsledek pak třeba nějak roztřídit podle potřeba. Vycházím z předpokladu, že v adresářích jsou další podadresáře které mohou něco obsahovat, takže nestačí porovnávat jen první úroveň vnoření jak asi dělá výše uvedená udělej-si-sám funkce.
23.3.2013 08:46 Makr
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
naopak, vnoření první úrovně stačí, chci ignorovat podadresáře složky a skryté soubory
23.3.2013 17:44 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
diff -sq adresář1 adresář2 | grep "Only in adresář1"
23.3.2013 18:08 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
find adresář1 adresář2 -maxdepth 1 -type f ! -name '.*' | cut -d "/" -f 2- | sort -u | while read f; do
  if [[ -f "a/$f" && ! -f "b/$f" ]]; then
    echo "Jen v adresář1: $f"
  elif [[ -f "b/$f" && ! -f "a/$f" ]]; then
    echo "Jen v adresář2: $f"
  else
    echo "Oba adresáře: $f";
  fi
done | sort -u
4.10.2009 14:54 deadmail
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
lepsi prikaz namiesto diff je prikaz cmp -3
4.10.2009 14:56 deadmail
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
OPRAVA: comm -3
4.10.2009 10:25 John
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Diky moc všem za odpovědi. To Ondřej Kubečka: Tvuj kod vypisuje ale vsechny slozky a adresare v obou slozkach. Mne slo o to aby se vypsali vsechny soubory a slozky které se v druhé slozce nevyskytují. Nevědel by jsi jak to poopravit ? diky moc
4.10.2009 13:50 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Který?

Zalidním dva adresáře (zápis: vstup - prompt odsazený mezerou; výstup - bez odsazení):
 $ mkdir -p dir1/{x,y} ; touch dir1/{a,b,c,d,e}
 $ mkdir -p dir2/{y,z} ; touch dir2/{b,c,d,e,f}
Varianta a:
 $ diff <(ls dir1) <(ls dir2)
1d0
< a
6c5
< x/
---
> f
7a7
> z/
Tedy jenom v prvním vlevo, jenom v druhem vpravo.

Varianta b:
 $ DIR1="dir1"
 $ DIR2="dir2"
 $
 $ this_dir_only()
 > {
 >    cd "${1}" || return 1
 >    echo "Pouze v: ${1}"
 >    for obj in *
 >       do [ -e "../${2}/${obj}" ] || echo $obj
 >    done
 >    cd ..
 >    echo
 > }
 $
 $ this_dir_only "${DIR1}" "${DIR2}"
Pouze v: dir1
a
x

 $ this_dir_only "${DIR2}" "${DIR1}"
Pouze v: dir2
f
z

Buď jsem nepochopil zadání, nebo jste se někde uklep, nebo nevím?

Pro úplnost zkoušeno na:
 $ bash --version
GNU bash, version 3.1.17(2)-release (x86_64-slackware-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
a
GNU bash, version 3.2.25(1)-release (i386-pc-solaris2.11)
Copyright (C) 2005 Free Software Foundation, Inc.
4.10.2009 14:13 John
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Diky moc, ono jde prave o to, ze kdyz zadam jako DIR1 a DIR2 absolutni cestu /home/....../dir1 tak to vypise uplne vsechny sobory v obou slozkach. To je ten problem :(
4.10.2009 14:38 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Aha, protože jsem předpokládal (což byla stejně chyba) pouze porovnání adresářů v aktuálním umístění. Tak to zkuste takhle:
DIR1="dir1"
DIR2="dir2"

this_dir_only()
{
   [ -d "${1}" -a -d "${2}" ] || return 1
   pfx=""
   pushd "${1}" &> /dev/null || return 2
   echo "Pouze v: ${1}"
   [ ${2:0:1} == "/" ] || pfx="../"
   for obj in *
      do [ -e "${pfx}${2}/${obj}" ] || echo $obj
   done
   popd &> /dev/null
   echo
}

this_dir_only "${DIR1}" "${DIR2}"
this_dir_only "${DIR2}" "${DIR1}"
4.10.2009 15:19 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Tak ještě jedna chyba, která způsobí nekorektní chování v jedné možné situaci (schválně, jaké?). Tohle už by snad mělo fungovat (a přitom se držet výhradně BASHe):
DIR1="dir1"
DIR2="dir2"

this_dir_only()
{
   [ -d "${1}" -a -d "${2}" ] || return 1
   top_dir="${PWD}"
   pfx=""
   pushd "${1}" &> /dev/null || return 2
   echo "Pouze v: ${1}"
   [ ${2:0:1} == "/" ] || pfx="${top_dir}/"
   for obj in *
      do [ -e "${pfx}${2}/${obj}" ] || echo $obj
   done
   popd &> /dev/null
   echo
}

this_dir_only "${DIR1}" "${DIR2}"
this_dir_only "${DIR2}" "${DIR1}"
5.10.2009 03:57 kuly
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Nejde vynechat ty saskarny okolo pouzitim in dir/* ?
5.10.2009 04:18 kuly
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
function onlyinfirst
{
  for ent in $1/*; do
    [ -e "$2/${ent##*/}" ] || echo $ent
  done
}

onlyinfirst $1 $2
onlyinfirst $2 $1
5.10.2009 04:23 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Koukám, že než to sem člověk hodí, už to sem dává podruhé.
5.10.2009 04:21 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Jde. ;)

Ale nesmíte použít basename, protože to už jste mimo BASH. Asi takhle, když už se ptáte:
this_dir_only()
{
   [ -d "${1}" -a -d "${2}" ] || return 1
   echo "Pouze v: ${1}"
   for obj in "${1}"/*
      do [ -e "${2}/${obj##*/}" ] || echo "${obj##*/}"
   done
   echo
}
4.10.2009 14:50 John
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Diky moc. Uz to jde jak jsem si to predstatoval. Omlouvám se ze jsem popisoval spatne muj problem asi jiz od zacatku. Jeste jednou diky za Vas cas. Ted doufam ze se mi pri pochopeni toho kodu neuvari hlava. :)
Tarmaq avatar 5.10.2009 11:58 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Bash - Porovnávávaní adresářů. Dotaz
Jsme radi ze se ti podarilo problem vyresit. Ted by bylo jeste fajn, kdybys oznacil prispevek ktery byl tim finalnim resenim..
Don't panic!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.