Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Téma založeno: miro_ 24 Června 2022, 22:18:55

Název: Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
Přispěvatel: miro_ 24 Června 2022, 22:18:55
Hledam reseni jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory
 vcetne 'relativni' adresarove struktury ...

Zatim jsem v linuxu nenasel (mozna neco neznam) nastroj, kterym bych byl schopen
z adresarove struktury vybrat a vykopiroval napriklad nejnovejsi doubory od zvoleneho data,
t.j. kopije souboru i s relativnim umistenim danne adresarove struktury.

Tuto moznost ma aplikace 'Ztree' ve starych Win-XP. Uzivam ji pri dilcich zalohach
po nejakych upravach 'C' projektu se spolecmou strukturou zdrojovych knihoven ..
'Ztree' nelze v linuxu, novych souborovych systemech, ve Wine korektne uzit.

Z funkcnich aplikaci v linuxu se 'Ztree' nejvice podoba aplikace 'Xfe'.
'Xfe' umi vytahnout z adresarove struktury nejnovejsi soubory, ale jednoduse hromadne vykopirovat
umi jen vse do zvoleneho adresare, jak jsem vyzkousel.
Toto mi pri uziti slozitejsich zdrojovych adresarovych strukturach nestaci.

Nevim zda jsem popsal moje predstavy dost srozumitelne.
Pokud nekdo zna a pochopil jak takovy problem v linuxu resit budu vdecen za pripadnou radu.
Název: Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
Přispěvatel: JirkaZ 24 Června 2022, 23:21:49
Nešlo by to udělat nějako synchronizací nebo backupem s použitím vhodného filtru?
Název: Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
Přispěvatel: juwa2 25 Června 2022, 10:45:29
Co takhle find s příslušnými parametry (-mtime)?
Jinak v linuxu existuje tree - zkus prostudovat možnosti...
Název: Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
Přispěvatel: miro_ 25 Června 2022, 21:30:40
- Moznosti 'find' jsem jiz drive zkousel.
Tam zadat pocatecni datum jednoduse lze.
Ale z vygenerovanych dat (do textoveho souboru) pak
musim specielne vytvorit pomocnou adresarovou strukturu
a pak do ni kopirovat soubory dle vygenerovaneho seznamu.
Prostredky pro generovani pomocnych skriptu si vytvorit umim.
(Obcas jsem si podobne specielni aplikace vytvoril
napriklad pro analyzu dat komunikaci mezi 485 zarizenimi).

- Dival jsem se na 'tree', ale pokud jsem neco neprehledl
"tree -t" umi vypsat strideny dle casu pouze cely obsah adresare, zbytecne.
Nejsou zde patrne casy odkud by vygenerovany seznam bylo nutne oriznout.
Problem aplikace pro zpracovani do potrebneho skriptu je pak stejny.
Pouziti 'find' se mi to zda jednodussi.

Zjistoval jsem zda neni jiz neco hotoveho.
 
Název: Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
Přispěvatel: miro_ 05 Července 2022, 14:46:14
Pred nekolika dny jsem se pustil po chvilich do aplikace
pro zpracovani vysledku vygenerovaneho pres
   "find . -type f -newermt ..."
Mam predstavu, ze v definovanem adresari vytvori
'mirror tree' jen s nalezenymi novejsimi soubory od zadaneho data.

Pri prvnim generovani a testovani jsem uzil
vytvoreny skript, uzivajiciho terminalovy povel "cp".
Narazil jsem ale na problem se jmeny souboru ke kopirovani.
Spusteny skript se zhouti pri kopirovani souboru,
ktere maji ve jmenu mezeru !
Napriklad soubor generovany z mobil Omron aplikace do eml.
 'Report from 21 December 2021 to 24 June 2022.xlsx'
(mozna vadi mezery i  v podatresari.
 takove jsem v testovacich datech nemel)


Dokumentaci "cp" jsem podrobne nestudoval.
Po tomto neuspechu jsem misto fce "cp"
resil kopirovani primo v 'C' pres std. fce 'fread() a 'fwrite()'.
Toto kopirovani je funkcni pro libovolna jmena i adresare.

Vadi mi ale, ze ztracim prehled o puvodnim casu vytvoreni souboru,
ktery dela soubory novejsi nez jsou puvodni.
(Testoval jsem fci "cp" a ta se chova stejne.)
Ve 'file-managerech' napr.caja,
pri kopirovani v systemu pres 'ctrl-c' a 'ctrl-v' nebo
'pretahovani' mezi otevrenymi okny atd. tento problem neni!

Problem se zmenou casu vytvoreni souboru znemoznuje
uziti synchronizace takto vytvoreneho 'mirror vybranych dat dle zadaneho casu'
s moji centralni zalohou (uzivam 'FreeFileSync').

Hledal jsem na webu sluzby jak zmenit puvodni cas primo v src
vytvarene 'C' aplikaci (viz. 'utime(2) — Linux manual page').
Bohuzel ziskany stav struktury 'utimbuf' neumim pouzit.
Na webu jsem zadny vhodny funkcni priklad nenasel
Poradi mi nekdo kdo programuje v 'C'?
Název: Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
Přispěvatel: ramael 05 Července 2022, 15:48:31
Mohl bys sem postnout skript kde se hroutí to cp kvůli mezerám?
Mimochodem cp má přepínač -p který kopíruje i atributy včetně timestamps:
Kód: [Vybrat]
ls -l
-rw-rw---- 1 radek radek  459 čen 26 21:24  my_conf.conf
cp my_conf.conf cpbezpecka.conf
ls -l
-rw-rw----  1 radek radek  459 čec  5 15:42  cpbezpecka.conf
-rw-rw---- 1 radek radek  459 čen 26 21:24  my_conf.conf
cp -p my_conf.conf cpspeckem.conf
ls -l
-rw-rw----  1 radek radek  459 čec  5 15:42  cpbezpecka.conf
-rw-rw----  1 radek radek  459 čen 26 21:24  cpspeckem.conf
-rw-rw----  1 radek radek  459 čen 26 21:24  my_conf.conf
EDIT:
Kód: [Vybrat]
cp -p my_conf.conf "mezerovy conf s timestampem.conf"
ls -l
-rw-rw---- 1 radek radek  459 čec  5 15:42  cpbezpecka.conf
-rw-rw---- 1 radek radek  459 čen 26 21:24  cpspeckem.conf
-rw-rw---- 1 radek radek  459 čen 26 21:24 'mezerovy conf s timestampem.conf'
-rw-rw---- 1 radek radek  459 čen 26 21:24  my_conf.conf
cp -p "mezerovy conf s timestampem.conf" "kopie kopie.conf"
ls -l
-rw-rw---- 1 radek radek  459 čec  5 15:42  cpbezpecka.conf
-rw-rw---- 1 radek radek  459 čen 26 21:24  cpspeckem.conf
-rw-rw---- 1 radek radek  459 čen 26 21:24 'kopie kopie.conf'
-rw-rw---- 1 radek radek  459 čen 26 21:24 'mezerovy conf s timestampem.conf'
-rw-rw---- 1 radek radek  459 čen 26 21:24  my_conf.conf
Název: Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
Přispěvatel: miro_ 05 Července 2022, 19:51:19
Nasel jsem zalohu stavu, kde jsem si  problem se scriptem dokumentoval.
Zasilam v priloze.
Název: Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
Přispěvatel: ramael 05 Července 2022, 19:54:29
Nejde najít chybu ve skriptu, když ho neznám podle chybových hlášek...
Název: Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
Přispěvatel: ramael 21 Července 2022, 03:25:32
Toto si uprav dle obrazu svého a pojmenuj to třeba mirror_find.sh:
Kód: [Vybrat]
#! /usr/bin/env bash


# proměnná s adresou, kam se budou kopírovat soubory včetně relativní adresářové struktury
kam="/home/radek/cosi"

# pokud cílový adresář neexistuje, vytvoří se
[ -d "$kam" ] || mkdir "$kam"

# najdi soubory v aktuálním adresáři. Předej výsledek jako parametr příkazu cp
# cp vytvoří adresářovou strukturu v adresáři $kam a nakopíruje tam nalezené soubory s
# nezměněnými atributy přístupu
find . -name "*.txt" -exec cp --parents -p '{}' -t "$kam" \;
Ty si samozřejmě místo /home/radek/cosi a -name "*.txt" zadej parametry dle tvého uvážení. Mezery tomu nevadí. Spouštěj to v adresáři který chceš kopírovat. Nejspíš to bude /home/mp/_MyRedmi_a_Wifi_/_Omron_2022_/
Pokud bys dal místo tečky za příkazem find adresu, tak se konstrukce '{}' změní z relativní cesty na absolutní.