오래된 백업 개념으로 인해 여기에는 다음과 같은 파일 구조를 가진 하드 드라이브가 있습니다.
/1.1
/2.1
/3.1
/FOLDER.DUPLICATE.$DRIVEBENDER/1.1
/FOLDER.DUPLICATE.$DRIVEBENDER/3.1
/FOLDER.DUPLICATE.$DRIVEBENDER/4.1
/Subfolder/1.2
/Subfolder/FOLDER.DUPLICATE.$DRIVEBENDER/2.2
/Subfolder/FOLDER.DUPLICATE.$DRIVEBENDER/3.2
결과는 원래 구조와 같아야 하므로 이름이 지정된 폴더의 모든 파일을 FOLDER.DUPLICATE.$DRIVEBENDER
한 수준 위로 이동해야 합니다. 더 높은 수준의 파일이 있는 경우 더 큰 파일이 우선 적용됩니다.
답변1
FOLDER.DUPLICATE.$DRIVEBENDER
다른 디렉터리에 디렉터리가 없다고 가정하면 FOLDER.DUPLICATE.$DRIVEBENDER
다음을 수행할 수 있습니다.
find . -path '*/FOLDER.DUPLICATE.$DRIVEBENDER/*' -prune -type f -print0 |
perl -0lne '
if (m{(.*)/FOLDER.DUPLICATE.\$DRIVEBENDER/(.*)}s) {
$upperfile = "$1/$2";
if (-s > -s $upperfile) {
rename $_, $upperfile or warn "rename $_: $!\n";
} else {
unlink $_ or warn "unlink $_: $!\n";
}
}'
( find
지원하지 않는 경우 -print0
로 대체할 수 있습니다 -exec printf '%s\0' {} +
.)