
내 컬렉션 사진을 "/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
find 명령을 실행하면 중간 디렉터리(이 경우 /home/Bruno/Archiv/Bilder/2013/01/23/
)가 아직 생성되지 않은 문제가 발생합니다. 그것은 당신의 경로에 있는 (무해한) '' 와는 아무런 관련이 없습니다 .
.
먼저 대상에 대한 전체 디렉터리 구조를 생성하거나 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에 복사합니다.