현재 내 mbsync
오류는 중복 항목입니다 UIDs
. 즉, 하위 문자열이 중복된 파일을 모두 찾아서 "U=[0-9]+:"
최신 파일을 변경하여 해당 하위 문자열을 제거해야 합니다.
예를 들어, 파일의 간단한 사례는 다음과 같습니다.
$> fd ".*U=17:.*" --exec ls -la {} \;
-rw------- 1 djm staff 95903 Mar 2 06:57 cur/1583291317.13980_115.DJM2,U=17:2,ST
-rw------- 1 djm staff 13654 Sep 30 2015 cur/1580615936.64042_2698.DJM2,U=17:2,S
$> mv ./cur/1583291317.13980_115.DJM2,U=17:2,ST ./cur/1583291317.13980_115.DJM2
문제는 아직 해야 할 일이 1000개 정도 더 남아 있다는 것입니다. 그래서 난 노력 중이야
- 해당 하위 문자열이 일치하는 모든 파일을 찾습니다.
- 하위 문자열을 일치시켜 정렬합니다.
- 중복된 일치 파일만 표시
- 이러한 중복 항목 중에서 최신 파일의 이름을 변경하여 해당 하위 문자열을 제거하세요.
나중에 파일 이름을 변경할 때 사용할 수 있도록 파일 경로를 그대로 유지하면서 모든 중복 항목을 찾을 수 없습니다.
이것이 내가 지금까지 가지고 있는 것입니다:
fd ".*U=[0-9]+:.*" | sort -t , -k2.3n | xargs -I{} printf "%s\t${%s//.*,}\n" "{}" "{}"
나는 fd
.find
패턴과 일치하는 모든 파일을 찾은 다음 ,
세 번째 문자부터 시작하여 출력 분할을 숫자로 정렬합니다.
uniq -d
여기에서 파일 경로로 인해 파이프만 연결하면 아무 것도 얻을 수 없기 때문에 이것을 중복 항목으로 필터링하는 데 문제가 있습니다. 그래서 printf
파일 경로에서 하위 문자열을 분리하여 uniq -d
.
계속 진행하는 방법을 잘 모르겠습니다. 대답은 지정된 하위 문자열을 기반으로 중복 파일 경로로 출력을 필터링하는 방법을 알려줍니다.
답변1
Heysus의 제안 덕분에 추가 단계를 추가하여 해결책을 찾았습니다.
x=($(ls -lR ./cur | grep -o 'U=.*:' | sort -k1.3n | uniq -d))
for i in "${x[@]}"; do
y=$(fd ".*${i}" --exec gstat -c '%X %n' \; | sort -nr | awk 'NR==1,NR==1 {print $2}')
newy=$(echo "$y" | sed 's/,.*//g')
mv "$y" "$newy"
done