|
| Bash find/cp script Fra : Carsten |
Dato : 27-09-02 09:59 |
|
Jeg har 2 directories, dirA og dirB. Jeg vil gerne have,
at dirB er en tro kopi af dirA. Det kan man normalt gøre med:
cp -R dirA/* dirB/
Men jeg vil gerne begrænse dette, så kun de filer der
er nyere end en bestemt dato kopieres. Man kan lave
noget med find:
find dirA -newer /tmp/timestampfile -exec cp {} dirB \;
Men den udelader directories, således disse ikke oprettes.
Jeg har overvejet at pipe resultatet af find ind i cpio,
og så pakke filen ud, eller måske skrive et perl script.
Men de to metoder er ikke så tiltalende. Er der en smartere
måde?
Takker
Carsten.
| |
Lars Kongshøj (27-09-2002)
| Kommentar Fra : Lars Kongshøj |
Dato : 27-09-02 11:55 |
|
Carsten wrote:
> Jeg har 2 directories, dirA og dirB. Jeg vil gerne have,
> at dirB er en tro kopi af dirA. Det kan man normalt gøre med:
> cp -R dirA/* dirB/
> Men jeg vil gerne begrænse dette, så kun de filer der
> er nyere end en bestemt dato kopieres. Man kan lave
> noget med find:
> find dirA -newer /tmp/timestampfile -exec cp {} dirB \;
> Men den udelader directories, således disse ikke oprettes.
Den udelader da kun directories, hvis du ikke giver cp de rigtige
options, fx -r.
--
Lars Kongshøj
Registrer dig som linux-bruger:
http://counter.li.org/enter-person.php
| |
Kim Hansen (27-09-2002)
| Kommentar Fra : Kim Hansen |
Dato : 27-09-02 12:59 |
|
Carsten <carsten@spam.me.senseless> writes:
> Jeg har 2 directories, dirA og dirB. Jeg vil gerne have,
> at dirB er en tro kopi af dirA. Det kan man normalt gøre med:
> cp -R dirA/* dirB/
>
> Men jeg vil gerne begrænse dette, så kun de filer der
> er nyere end en bestemt dato kopieres. Man kan lave
> noget med find:
> find dirA -newer /tmp/timestampfile -exec cp {} dirB \;
>
> Men den udelader directories, således disse ikke oprettes.
> Jeg har overvejet at pipe resultatet af find ind i cpio,
> og så pakke filen ud, eller måske skrive et perl script.
> Men de to metoder er ikke så tiltalende. Er der en smartere
> måde?
rsync
--
Kim Hansen | |\ _,,,---,,_ | Det er ikke
Dalslandsgade 8, A708 | /,`.-'`' -. ;-;;,_ | Jeopardy.
2300 København S | |,4- ) )-,_. ,\ ( `'-' | Svar _efter_
Phone: 32 88 60 86 | '---''(_/--' `-'\_) | spørgsmålet.
| |
Byrial Jensen (28-09-2002)
| Kommentar Fra : Byrial Jensen |
Dato : 28-09-02 04:59 |
|
Carsten <carsten@spam.me.senseless> skrev:
>
> Jeg har 2 directories, dirA og dirB. Jeg vil gerne have,
> at dirB er en tro kopi af dirA. Det kan man normalt gøre med:
> cp -R dirA/* dirB/
>
> Men jeg vil gerne begrænse dette, så kun de filer der
> er nyere end en bestemt dato kopieres. Man kan lave
> noget med find:
> find dirA -newer /tmp/timestampfile -exec cp {} dirB \;
>
> Men den udelader directories, således disse ikke oprettes.
> Jeg har overvejet at pipe resultatet af find ind i cpio,
> og så pakke filen ud, eller måske skrive et perl script.
> Men de to metoder er ikke så tiltalende. Er der en smartere
> måde?
Man kan f.eks. bruge GNU tar:
$ # NB. Utestet kode.
$ rm -rf dirB
$ mkdir dirB
$ (cd dirA; tar --newer=/tmp/timestampfile -cf - .) | (cd dirB ; tar
--preserve-permissions -xf -)
Kan nemt pakkes ind i et shell script efter behag.
| |
|
|