最后活跃于 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 修订了这个 Gist 1753882766. 转到此修订

没有任何变更

anthony's Avatar anthony 修订了这个 Gist 1753882752. 转到此修订

1 file changed, 103 insertions

restore-orphaned-media.sh(文件已创建)

@@ -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 + }"
上一页 下一页