1년이 넘은 파일을 상위 아카이브 디렉터리로 이동

1년이 넘은 파일을 상위 아카이브 디렉터리로 이동

내 사진 컬렉션을 "/home/Bruno/Bilder" 디렉토리의 상위 디렉토리인 "/home/Bruno/Archiv/Bilder" 디렉토리로 이동하고 싶습니다.

나는 다음과 같이 시작했습니다:

find  -ctime +365 -exec echo mv '{}' ../Archiv/Bilder/'{}' \; | bash

하지만 find에는 {}의 현재 디렉터리에 대한 점이 포함되어 있습니다. 그래서 나는 다음을 얻습니다:

mv ./2013/01/19/DSC_0141.JPG ../Archiv/Bilder/./2013/01/19/DSC_0141.JPG
mv: das Verschieben von »./2013/01/23/IMG_0052.JPG“ nach »../Archiv/Bilder/./2013/01/23/IMG_0052.JPG“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden

그래서 sed 사용의 요점을 제거했습니다.

find  -ctime +577 -exec echo mv '{}' ../Archiv/Bilder/'{}' \;  | sed 's/\/Bilder\/\.\//\/Bilder\//' | bash

하지만 같은 오류가 발생합니다.

mv: das Verschieben von »./2013/01/10/IMG_0141.JPG“ nach »../Archiv/Bilder/2013/01/10/IMG_0141.JPG“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden

그래서 작업을 수행하기 위해 rsync로 전환하고 싶습니다.

find  -ctime +577 -exec echo rsync -n --remove-source-files '{}' ../Archiv/Bilder/'{}' \;  | sed 's/\/Bilder\/\.\//\/Bilder\//' | bash

rsync가 실패하지만 더 장황합니다.

rsync: change_dir#3 "/home/Bruno/Bilder//../Archiv/Bilder/2013/01/10" failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(712) [Receiver=3.1.0]

내가 여기서 뭘 잘못하고 있는 걸까?

답변1

/home/Bruno/Archiv/Bilder/2013/01/23/find 명령에서 중간 디렉터리(이 경우)가 아직 생성되지 않은 문제가 발생했습니다. 이는 .경로의 (무해한) ""와는 아무런 관련이 없습니다.

먼저 대상의 전체 디렉터리 구조를 생성하거나 mv먼저 대상 디렉터리를 생성한 다음 이동을 수행하는 대신 호출하는 작은 스크립트를 생성해야 합니다.

mkdirmv:

#!/bin/sh
mkdir -p -- "$(dirname $2)"
mv -- "$1" "$2"

답변2

나중에 참조할 수 있도록 install직접 수행할 수 있습니다.

install -D ./2013/01/10/IMG_0141.JPG ../Archiv/Bilder/2013/01/10/IMG_0141.JPG

참고: 이 작업을 수행하려면 두 번째 매개변수에 파일 경로를 추가해야 합니다. 다시 말해서:

잘못된:

find . -ctime +365 -exec install -D '{}' ../Archiv/Bilder/ \;

옳은:

find . -ctime +365 -exec install -D '{}' '../Archiv/Bilder/{}' \;

매뉴얼 페이지에 따르면 install:

-D 마지막 구성요소를 제외하고 DEST의 모든 주요 구성요소를 생성한 다음 SOURCE를 DEST에 복사합니다.

관련 정보