파일이 최신인 경우에만 실행되는 find 명령

파일이 최신인 경우에만 실행되는 find 명령

다음 단계의 스크립트가 있습니다.

  • 1 lftp를 사용하여 원격 서버를 미러링합니다.
open ftps://'[name]':'[pwd]'@[remote_host]    
set ssl:check-hostname no  
mirror --delete-first --only-newer /ExchangeSets
/home/sandbox_autopilot/Exchangesets  
exit
  • 2 다음으로 find 명령을 사용하여 파일 이름의 시작 부분을 기준으로 파일을 정렬하고 폴더에 복사했습니다.
find /home/sandbox_autopilot/Exchangesets -iname '1R4*.000' -exec cp -u --target-directory /home/sandbox_autopilot/1R4/ {} \;  
find /home/sandbox_autopilot/Exchangesets -iname '1R5*.000' -exec cp -u --target-directory /home/sandbox_autopilot/1R5/ {} \;  
find /home/sandbox_autopilot/Exchangesets -iname '1R6*.000' -exec cp -u --target-directory /home/sandbox_autopilot/1R6/ {} \;
  • 3 1R4, 1R5, 1R6 폴더의 파일에 대해 여러 GIS 변경 사항을 적용했는데 이는 내 문제와 관련이 없습니다.

중요한 것들:

  • 원격 서버를 미러링한 후 /home/sandbox_autopilot/Exchangesets 폴더의 하위 폴더 이름은 4자리로 시작하고, 최신 파일이 포함된 폴더는 이전 폴더보다 높은 4자리로 시작합니다(아래 예 참조).
  • /home/sandbox_autopilot/Exchangesets의 폴더 구조에는 동일한 파일의 여러 버전이 있습니다. "find -exec cp" 명령에서 요청한 동작은 사용 가능한 파일의 최신 버전을 대상 디렉터리에 배치하는 것입니다.

폴더 /home/sandbox_autopilot/Exchangesets 구조에 있는 여러 파일의 예:

find . -name 1R65Y842.000  
./5704b_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000
./5721a_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000
./5673b_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000
./5618_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000
./5802b_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000
./5646a_[projectname]/ENC_ROOT/1R/6/1R65Y842/1R65Y842.000

참고: [프로젝트 이름]은 모두 다르지만 개인정보 보호를 위해 이 예에서는 공백으로 남겨두었습니다.

문제:
"find -exec cp" 명령이 1R6 폴더의 최신 파일을 제공하지 않습니다.

내 생각엔 그런 일이 일어나고 있는 것 같아.

  • 원래 폴더 구조에서 파일의 날짜는 "lftp 미러" 명령에 의해 올바르게 전달됩니다. 따라서 최신 파일의 날짜가 최신입니다.
  • "find -exec cp" 명령이 파일을 찾아 해당 1R 폴더에 복사하는 경우. 파일 날짜는 now()로 설정됩니다. 그런 다음 "find -exec cp" 명령이 동일한 이름을 가진 최신 파일을 찾으면 대상 디렉터리의 날짜가 더 최신(now())이고 덮어써야 하는 파일의 파일 날짜이므로 복사되지 않습니다. 대상 디렉토리 파일에 있으므로 cp의 -u 기능을 쓸모 없게 만듭니다.

내가 고려 중인 솔루션:

  • 파일이 대상 디렉터리에 복사될 때 cp 명령이 파일 날짜를 변경하지 못하도록 할 수 있습니까? 그러면 cp -u가 올바른 날짜를 평가하고 최신 버전의 파일을 대상 디렉터리에 넣을 수 있습니까?
  • 실제 복사본을 만드는 대신 심볼릭 링크를 사용하는 것이 도움이 될까요?
  • 발견된 파일 버전을 평가하고 최신 버전의 파일에 대해서만 복사 명령을 수행하는 옵션이 찾기에 있습니까?

나의 겸손한 요청:
내가 올바른 방향으로 나아갈 수 있도록 도와줄 수 있는 사람이 있나요?

답변1

cp 명령은 타임스탬프를 포함한 속성을 보존할 수 있습니다. 가장 간단한 보관 방법: cp -a모든 속성을 유지합니다. 매뉴얼에서:

   --preserve[=ATTR_LIST]
         preserve the specified attributes (default:  mode,ownership,timestamps),  if  possible  additional  at‐
         tributes: context, links, xattr, all

그리고

  -a, --archive
         same as -dR --preserve=all

관련 정보