Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....  (Přečteno 4027 krát)

miro_

  • Aktivní člen
  • *
  • Příspěvků: 232
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.

JirkaZ

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 1756
  • Dlouholetý uživatel Linuxu a open source obecně.
Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
« Odpověď #1 kdy: 24 Června 2022, 23:21:49 »
Nešlo by to udělat nějako synchronizací nebo backupem s použitím vhodného filtru?

juwa2

  • Závislák
  • ***
  • Příspěvků: 4936
Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
« Odpověď #2 kdy: 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...

miro_

  • Aktivní člen
  • *
  • Příspěvků: 232
Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
« Odpověď #3 kdy: 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.
 

miro_

  • Aktivní člen
  • *
  • Příspěvků: 232
Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
« Odpověď #4 kdy: 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'?

ramael

  • Stálý člen
  • **
  • Příspěvků: 637
Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
« Odpověď #5 kdy: 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
« Poslední změna: 05 Července 2022, 15:56:19 od ramael »
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

miro_

  • Aktivní člen
  • *
  • Příspěvků: 232
Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
« Odpověď #6 kdy: 05 Července 2022, 19:51:19 »
Nasel jsem zalohu stavu, kde jsem si  problem se scriptem dokumentoval.
Zasilam v priloze.

ramael

  • Stálý člen
  • **
  • Příspěvků: 637
Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
« Odpověď #7 kdy: 05 Července 2022, 19:54:29 »
Nejde najít chybu ve skriptu, když ho neznám podle chybových hlášek...
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

ramael

  • Stálý člen
  • **
  • Příspěvků: 637
Re:Jak vykopirovat z adresarove struktury napr. jen nejnovejsi soubory .....
« Odpověď #8 kdy: 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í.
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

 

Provoz zaštiťuje spolek OpenAlt.