지난 1년 동안 추가된 이미지를 디렉토리에서 찾아 원래 폴더 구조를 유지하는 새 디렉토리에 복사하고 싶습니다.
find를 사용하고 있지만 아무것도 복사하지 않습니다. 한 줄 명령을 사용하여 수행할 수 있는 방법이 있습니까?
find image/* -mtime +356 -exec cp {} modified-last-year/ \;
이 명령을 실행할 때 이미지 디렉터리에 있는데 이미지 폴더를 재귀적으로 검색하고 싶습니다.
[편집]
이 두 가지 질문에 답한 후 다음을 수행했습니다. 1. 블록이 0개 있어요
.find image/* -mtime +356 | cpio -pd /target_dir
find /full/path/to/image -mtime 365 -type f ( "-name *.jpg -o -name *.gif ) -execdir cp {} /full/path/to/image_target_dir/modified-last-year \;
그리고find /full/path/to/image -mtime 365 -type f -execdir cp {} /full/path/to/image_target_dir/modified-last-year \;
아무것도 복사되지 않습니다.그리고 -type f를 사용하거나 사용하지 않고 파일 수를 조회하면 됩니다.
find /full/path/to/image -mtime 365 -type f | wc -l
나는 0을 얻는다.이미지 디렉토리와 하위 디렉토리에 지난 1년 동안 추가된 파일이 존재하는지 확인할 수 있습니다. 실제로는 200개 이상의 이미지가 있어야 합니다.
[편집 2]
또한 다음 코드가 제대로 작동하려면 조회에서 디렉터리를 제외해야 했습니다.첫 번째 답변 덕분에 이것을 만들 수 있었습니다.
find /full/path/to/image/* -path /full/path/to/image/ignored_dir -prune -o -print -mtime -365 | cpio -pd /full/path/to/target_dir/modified-last-year
답변1
cpio
다음을 사용하여 통과 모드에서 찾기를 사용할 수 있습니다 .
find image/ -mtime -365 | cpio -pd /target_dir
편집: 검색 경로에서 불필요한 *를 제거했습니다.
답변2
이미 디렉토리에 있다면 문제가 있는 것입니다 image
. 상대 경로의 경우 (etc)를 find image/* ...
사용할 수 있습니다 . 여기서 "." find .
현재 디렉터리와 해당 하위 디렉터리 트리를 나타내거나 더 나은 방법은 절대 경로를 사용하는 것입니다.
$ find /full/path/to/imagedir -mtime -365 -execdir cpio -pdv {} /absolute/path/to/targetdir \;
적절한 권한이 있는 경우 위 명령은 디렉터리 구조를 유지하면서 지난 365*24시간(오늘 이전) 동안 수정된 모든 파일을 대상 디렉터리에 복사해야 합니다.
옵션은 동일한 작업을 수행하지만 선택한 파일이 있는 디렉터리에서 수행되는 것 -execdir
보다 안전합니다 .-exec
-type f \( "-name \*.jpg -o -name \*.gif \)
위의 cmd에 옵션을 지정하여 구문 분석 중인 파일을 추가로 제한할 수 있습니다.
cpio의 옵션은 다음과 같습니다.
-p for passthrough (does not make an archive out of the set of dound files)
-d to preserve the directory structure
-v to visualize files being copied
find
다음에서 맨페이지를 확인하세요 .https://www.gnu.org/software/cpio/manual/cpio.html전체 cpio
온라인 설명서를 받아 기억하세요www.startpage.com답을 구할 때 제품을 제공하지 않는 친구입니다.