스크립트를 통해 이전 버전 파일을 다른 폴더로 이동 [닫기]

스크립트를 통해 이전 버전 파일을 다른 폴더로 이동 [닫기]

내 cmd 스크립트가 내 폴더를 탐색하고 폴더에서 이전 버전의 pdf 문서를 찾아 Old Versions라는 다른 폴더로 이동하는 방법을 찾으려고 합니다.

내가 겪고 있는 문제는 파일 이름이 버전마다 변경된다는 것입니다. IE DE-321-DLS-R04.pdf가 DE-321-DLS-R05.pdf로 변경되었습니다.

어디서부터 시작해야할지 모르겠습니다. 날짜를 사용하지만 파일 이름이 다른 스크립트를 본 적이 있습니다.

도와주세요.

답변1

어쩌면 다음과 같은 것일 수도 있습니다.

find . -name 'DE-321-DLS-R*.pdf' | sort -r | sed '1 d' | xargs mv -t "older versions"

설명하다:

  • find . -name 'DE-321-DLS-R*.pdf'를 사용하여 현재 디렉터리를 나열합니다 DE-321-DLS-R.

  • sort -r파일 목록 정렬취소주문하다.

  • sed '1 d'첫 번째 라인을 제외한 모든 입력 라인을 출력합니다.

  • xargs mv -t "older versions"mv이전 sed명령의 출력을 인수로 사용하여 호출하고 mv모든 인수를 디렉터리로 이동하라는 지시를 받았습니다 older versions.

예:

$ ls -1
DE-321-DLS-R00.pdf
DE-321-DLS-R01.pdf
DE-321-DLS-R02.pdf
DE-321-DLS-R03.pdf
DE-321-DLS-R04.pdf
DE-321-DLS-R05.pdf
$ mkdir "older versions"
$ find . -name 'DE-321-DLS-R*.pdf' | sort -r | sed '1 d' |
xargs mv -t "older versions"
$ ls -1
DE-321-DLS-R05.pdf
older versions
$ ls -1 "older versions"
DE-321-DLS-R00.pdf
DE-321-DLS-R01.pdf
DE-321-DLS-R02.pdf
DE-321-DLS-R03.pdf
DE-321-DLS-R04.pdf

답변2

일부 테스트 문서를 생성합니다.

$ mkdir temp
$ cd temp
$ touch aaa-R00.pdf  aaa-R01.pdf aaa-R02.pdf  bbb-R19.pdf bbb-R20.pdf
$ ls | sort -r

bbb-R20.pdf
bbb-R19.pdf
aaa-R02.pdf
aaa-R01.pdf
aaa-R00.pdf

바라보다!BBB-R20.pdf그리고aaa-R02.pdf최신 버전이므로 다른 버전으로 이동해야 합니다.

오래된 문서를 "사용되지 않음"으로 표시하려면 이 스크립트를 터미널에 복사하여 붙여넣으세요.

for doc in $(ls | grep 'R[0-9][0-9].pdf$' | sort -r); do
  name=${doc%%[0-9][0-9].pdf}

  if [[ "$name" != "$last" ]]; then
    echo $doc latest
  else
    echo $doc outdate
  fi
  last=$name
done

결과:

bbb-R20.pdf latest
bbb-R19.pdf outdate
aaa-R02.pdf latest
aaa-R01.pdf outdate
aaa-R00.pdf outdate

문제의 경우 "echo $doc outdate"를 "mv $doc path/to/outdate/"로 바꿀 수 있습니다.

관련 정보