Son aktivite 1753882767

IDK why but some of my photos and videos removed from HDD but meta info still persists in DB. I made a script which restores some photos from another directory by original filenames

anthony's Avatar anthony bu gisti düzenledi 1753882766. Düzenlemeye git

Değişiklik yok

anthony's Avatar anthony bu gisti düzenledi 1753882752. Düzenlemeye git

1 file changed, 103 insertions

restore-orphaned-media.sh(dosya oluşturuldu)

@@ -0,0 +1,103 @@
1 + #!/bin/bash
2 +
3 + srcPath='/mnt/Data/Фото/!_SORT/SamsungSort'
4 + ownerId='b3f46eb5-81a6-4283-aade-d726823d7af4'
5 +
6 + ########################################################
7 +
8 + source .env || exit 10
9 + libHostPath="$UPLOAD_LOCATION"
10 + libContainerPath='/usr/src/app/upload'
11 +
12 + sql="SELECT \"id\",
13 + \"originalPath\",
14 + \"originalFileName\"
15 + FROM asset
16 + WHERE 1=1
17 + AND \"libraryId\" IS NULL
18 + AND \"status\" = 'active'
19 + # AND \"type\" = 'IMAGE'
20 + AND \"ownerId\" = '$ownerId'
21 + "
22 + echo "$sql"
23 +
24 + IFS='|' rows=($(docker exec immich_postgres psql -U "$DB_USERNAME" -d "$DB_DATABASE_NAME" -c "$sql" -t))
25 +
26 + awk <<< ${rows[@]} "
27 + @load \"filefuncs\"
28 + function join(array, start, end, sep, result)
29 + {
30 + if (sep == \"\") {
31 + sep = \" \"
32 + } else if (sep == SUBSEP) { # magic value
33 + sep = \"\"
34 + }
35 +
36 + result = array[start]
37 + for (i = start + 1; i <= end; i++) {
38 + if (array[i] == sep) {
39 + continue
40 + }
41 + result = result sep array[i]
42 + }
43 + return result
44 + }
45 + {
46 + if (NR == 20) {
47 + exit
48 + }
49 +
50 + type=\$4
51 + guid=\$1
52 + print \"[\" NR \"] \" type \" \" guid
53 +
54 + immichUploadPath=\$2
55 + print \"\t* Immich upload path:\t\" immichUploadPath
56 +
57 + immichUploadPath=sprintf(\"%s/%s\", \"$libHostPath\", substr(immichUploadPath, length(\"$libContainerPath\") + 2, length(immichUploadPath)))
58 + n=split(immichUploadPath, arr, \"/\")
59 + immichUploadDir=join(arr, 1, n-1, \"/\")
60 + immichUploadStat=stat(immichUploadPath, fdata)
61 + immichUploadSize=fdata[\"size\"]
62 + print \"\t* Immich local dir:\t\" immichUploadDir
63 + print \"\t* Immich local path:\t\" immichUploadPath
64 + print \"\t* Immich local size:\t\" immichUploadSize
65 +
66 + n=split(immichUploadPath, arr, \"/\")
67 + immichThumbDir=join(arr, 1, n-3, \"/\") \"/\" substr(guid, 1, 2) \"/\" substr(guid, 3, 2)
68 + immichThumbPath=immichThumbDir \"/\" guid \"-preview.jpeg\"
69 + gsub(/upload/, \"thumbs\", immichThumbPath)
70 + immichThumbStat=stat(immichThumbPath, fdata)
71 + immichThumbSize=fdata[\"size\"]
72 + print \"\t* Immich thumb dir:\t\" immichThumbDir
73 + print \"\t* Immich thumb path:\t\" immichThumbPath
74 + print \"\t* Immich thumb size:\t\" immichThumbSize
75 +
76 + origHostPath=sprintf(\"%s/%s\", \"$srcPath\", \$3)
77 + origHostStat=stat(origHostPath, fdata)
78 + origHostSize=fdata[\"size\"]
79 + print \"\t* Original host path:\t\" origHostPath
80 + print \"\t* Original host size:\t\" origHostSize
81 +
82 + if (origHostStat != 0 && immichUploadStat != 0 && immichThumbStat != 0) {
83 + print \">>> BADBADBAD\"
84 + } else if (origHostStat == 0) {
85 + if (immichUploadStat == 0) {
86 + print \">>> ORIG OK\"
87 + } else {
88 + system(\"mkdir -p \" immichUploadDir)
89 + system(\"cp -f \" origHostPath \" \" immichUploadPath)
90 + print \">>> ORIG COPIED\"
91 + }
92 + if (immichThumbStat == 0) {
93 + print \">>> THUMB OK\"
94 + } else {
95 + # system(\"mkdir -p \" immichThumbDir)
96 + # system(\"cp -f \" origHostPath \" \" immichThumbPath)
97 + # print \">>> THUMB COPIED\"
98 + print \">>> THUMB SKIPPED\"
99 + }
100 + }
101 +
102 + print \"\"
103 + }"
Daha yeni Daha eski