내 사진 컬렉션을 "/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에 복사합니다.