다른 디렉토리에서 중복 파일(fdupes로 식별됨)의 이름을 바꾸는 더 빠른 방법은 무엇입니까?

다른 디렉토리에서 중복 파일(fdupes로 식별됨)의 이름을 바꾸는 더 빠른 방법은 무엇입니까?

나는 저널 기사의 PDF 파일로 가득 찬 디렉토리를 가지고 있으며 대부분은 Bibtex 키로 명명되었습니다. 얼마 전에 외장 하드 드라이브에 백업을 했는데 최신 상태로 유지하지 않았고 이름이 다른 중복 파일이 엄청나게 많았습니다. 두 디렉터리를 다시 동기화하고 중복 파일을 삭제하고 싶습니다.

fdupes를 사용하여 그 중 몇 개를 식별했으며 이제 멋진 쌍 목록을 갖게 되었습니다. 그러나 외부 드라이브에 있는 대부분의 복제본은 의미 없는 이름을 갖습니다. 너무 많아서 삭제하고 다시 복사하는 대신 첫 번째 디렉터리의 중복 항목과 동일하게 이름을 바꾸고 싶습니다. 그래서 저는 rsync를 사용하고 싶지 않습니다.

예를 들어, fdupes 출력이 다음과 같은 경우:

/home/articles/bibtex.pdf
/external/articles/morearticles44.pdf

쓰는 것보다 빠른 방법이 있나요?

mv /external/articles/morearticles44.pdf /external/articles/bibtex.pdf

각 복제본 쌍에 대해?

답변1

내 경험에 따르면 fdupes파일을 출력하는 순서가 일관성이 없을 수 있습니다( --delete이 옵션에는 내 자신의 문제가 있었습니다). 이는 파일이 특정 순서로 있을 필요가 없으므로 매우 강력합니다(다른 폴더에 항상 두 개의 중복 파일이 있는 한).

# note no trailing slash
source_dir=/home/articles
target_dir=/external/articles

fdupes "$target_dir" "$source_dir" |
  while IFS= read file; do
    case "$file" in
      "$source_dir/"*)
         source=${file##*/}
         ;;
      "$target_dir/"*)
         target=$file
         ;;
      '')
         if [ "$source" ] && [ "$target" ]; then
           echo mv -i "$target" "$target_dir/$source"
         fi
         unset source target
         ;;
    esac
  done

그러면 명령이 인쇄되고 원하는 것이 확실해지면 삭제됩니다 mv. echo또한 덮어쓸 내용이 있으면 -i옵션에서 메시지를 표시합니다.mv

답변2

저는 다른 작업 흐름을 제안하려고 합니다(하센지가 제안한): 사용하는 대신 fdupes사용할 수 있습니다.조화중복을 식별하고 처리합니다.

원격 루트 중 하나를 사용하여 Unison을 실행해야 합니다. 그렇지 않으면 동일한 파일을 감지하지 못합니다. 그러니 달려라

unison /home/articles/bibtex.pdf ssh://localhost/external/articles

Unison은 잠시 휘젓다가 두 트리를 동기화할 것을 제안합니다. 동기화된 >이동 /external/articles/morearticles44.pdf방향을 선택합니다 /external/articles/bibtex.pdf.

관련 정보