Portál AbcLinuxu, 12. května 2025 22:21

Dotaz: Script FIND

11.12.2019 18:30 teevee70
Script FIND
Přečteno: 288×
Odpovědět | Admin
Dobrý den, už několik dnů zápasím s problémem:

Adresář /home/user/DICOM , který obsahuje několik podsložek s obrazovými daty ve formátu dicom. V principu každá podsložka obsahuje až několik desítek souborů pojmenovaných jako IMG0001 a výše. Soubory obvykle nemají příponu !!! Někdy mohou mít příponu .dcm. To záleží na SW, který používají na radiologii ( jde o obrazová data z CT nebo rezonance).

Pořebuji všechny soubory IMGXXXXX z adresáře /home/user/DICOM včezně všech podsložek nakopírovat do jedné složky např. /home/user/IMPORT tak, aby se obrázky stejného jména ( pocházející z různých podsložek ) automaticky přejmenovaly, aby nedocházelo k duplicitám.

Část skriptu pro vyhledání souborů bez přípony tam soubory nakopíruje samozřejmě jen jednou a pokud je zdrojový soubor stejného jména , pak smůla.

find /home/user/DICOM/ -type f ! -name "*.*" -exec cp {} /home/user/IMPORT/

Můžete mi s tím někdo pomoci. Děkuji předem Tomáš
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

k3dAR avatar 11.12.2019 19:00 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Script FIND
Odpovědět | | Sbalit | Link | Blokovat | Admin
pokud sw nekontroluje pripony, tak nejjednodusi i kdyz urcite ne nejlepsi reseni muze byt prikazu cp pridat parametr "--backup=numbered", ten zajisti ze pripadny jiz existujici soubor se pred prepsanim prejmenuje na soubor.~cislo+1~, samozrejme se tim takto ztrati posloupnost, coz z dotazu nevim, ale logicky asi potreba je zachovat ji...
porad nemam telo, ale uz mam hlavu... nobody
11.12.2019 19:08 NN
Rozbalit Rozbalit vše Re: Script FIND
Odpovědět | | Sbalit | Link | Blokovat | Admin
Staci soubory treba ocislovat:
i=0
for F in $(find /home/user/DICOM/ -type f -name "IMG*"); do
  cp $F /home/user/IMPORT/$i-$(basename $F)
  ((i++))
done
11.12.2019 19:09 debian+
Rozbalit Rozbalit vše Re: Script FIND
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neriez vsetko naraz a podel si to. Takze maj niekolko programov, ktore budu robit medzikroky. Tiez mas vyhodu, ze to mozes "debugovat".
11.12.2019 19:32 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Script FIND
Odpovědět | | Sbalit | Link | Blokovat | Admin
Niečo podobného som rozoberal v blogu. Ten FIND sa dá jednoducho upraviť aby z neho vyšli len obrázky DICOM medical imaging data. Ale ako zabezpečiť unikátnosť názvu ak tam je aj napríklad DICOMDIR ktorý obsahuje relatívne cesty k tým obrázkom?
Pavel 'TIGER' Růžička avatar 11.12.2019 20:30 Pavel 'TIGER' Růžička | skóre: 54
Rozbalit Rozbalit vše Re: Script FIND
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já bych asi nejprve zajistil jednotnost, buď odebrat koncovku .dcm u souboru, kde existuje, nebo ji přidal tam, kde není. Pak bych zahájil hromadné přejmenování, podle datumového razítka, čímž se vyloučí duplicity.
11.12.2019 21:04 dcm
Rozbalit Rozbalit vše Re: Script FIND
Odpovědět | | Sbalit | Link | Blokovat | Admin
$ ls dicom import
dicom:
'img 0 0 1'   img001   img001.dcm   1   2   3

import:
$ find dicom -name "*" -type f
dicom/1/img001
dicom/img001.dcm
dicom/2/img001
dicom/img 0 0 1
dicom/3/img001
dicom/img001
$ find dicom -name "*" -type f > dicom.files
$ sed 's/^\(.*\)$/cp "\1"/' dicom.files > cp.from
$ sed 's/^dicom\///' dicom.files | sed 's/\//_/' | sed 's/^\(.*\)/"import\/\1"/' > cp.to

$ paste -d " " cp.from cp.to
cp "dicom/1/img001" "import/1_img001"
cp "dicom/img001.dcm" "import/img001.dcm"
cp "dicom/2/img001" "import/2_img001"
cp "dicom/img 0 0 1" "import/img 0 0 1"
cp "dicom/3/img001" "import/3_img001"
cp "dicom/img001" "import/img001"
$ ls dicom import
dicom:
'img 0 0 1'   img001   img001.dcm   1   2   3

import:
'img 0 0 1'   img001   img001.dcm   1_img001   2_img001   3_img001

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.