특정 파일을 다른 디렉토리에 복사

특정 파일을 다른 디렉토리에 복사

특정 확장자를 가진 파일을 찾아 다른 하드 드라이브/디렉토리에 복사하거나 재동기화하려고 합니다.

sudo find . \( -type f \( -iname '*.jpg' -o -iname "*png" -o -iname "*mov" -o -iname "*mp3" -o -iname "*mp4" -o -iname "*swf" -o -iname "*avi" \) -exec rsync {} ~/test/dest/ \; \)

셸 출력은 다음과 같습니다.

cp: './dest/DSC_0085.JPG' and '/home/sanz/test/dest/DSC_0085.JPG' are the same file
cp: './dest/DSC_0086.avi' and '/home/sanz/test/dest/DSC_0086.avi' are the same file

등...

복사 중인 파일과 복사하려는 위치가 서로 다른 디렉터리에 있음에도 불구하고 동일한 파일이라고 계속 알려주는 이유는 무엇입니까? 이것은 말이 되지 않습니다.

또한 명령의 다양한 변형을 시도하고 있지만 원하는 대로 작동하지 않습니다.

sudo find . -type f -iname '*.jpg' -o -name "*png" -o -name "*mov" -o -name "*mp3" -o -name "*mp4" -o -name "*swf" -o -name "*avi" -exec rsync -ah --progress {} ~/test/dest \;

avi 파일만 복사하고 다른 파일은 완전히 무시합니다. 나에게 이상한 점은 -exec가 없는 동일한 명령은 일반적으로 특별히 태그가 지정된 모든 파일을 출력하지만 복사 명령과 함께 사용하려면 avi 파일만 읽거나 복사한다는 것입니다.

답변1

명령을 실행하면 로 식별된 하위 디렉터리를 /home/sanz/test포함하여 파일의 어느 위치에서나 지정된 이름을 가진 파일을 찾습니다 . dest이는 동일한 디렉토리이므로 실제로 디렉토리와 파일을 자체에 복사하려고 합니다.find./dest~/test/dest//home/sanz/test/dest/

/home/sanz/test그 안에 있는 파일을 찾아 복사하려면 제외 옵션을 ~/test/dest사용해야 합니다 .-prune/home/sanz/test/dest

sudo find . -path ./dest -prune -o \( -type f \( -iname '*.jpg' -o -iname "*png" -o -iname "*mov" -o -iname "*mp3" -o -iname "*mp4" -o -iname "*swf" -o -iname "*avi" \) -exec rsync {} ~/test/dest/ \; \)

답변2

디렉터리에서 해당 디렉터리의 하위 디렉터리로 파일을 복사하면 Freddy가 말한 것처럼 동일한 디렉터리에 동일한 파일을 복사한 것과 같습니다. 그래서 다른 곳에 디렉토리를 생성하고 키보드를 두드린 후 다음 코드를 생성했습니다.

sudo find ~/test/ \( -type f \( -iname '*.jpg' -o -iname "*png" -o -iname "*mov" -o -iname "*mp3" -o -iname "*mp4" -o -iname "*swf" -o -iname "*avi" \) -exec rsync {} ~/dest/ \; \)

매우 매력적입니다. 나는 이러한 기술적인 용어에 대해 잘 알지 못하지만 여러분이 나를 이해해주기를 바랍니다.

관련 정보