KSH : cp는 파일 크기만을 기준으로 합니다.

KSH : cp는 파일 크기만을 기준으로 합니다.

.logA 디렉터리에서 B 디렉터리로 확장자를 가진 모든 파일을 복사하는 작은 스크립트를 작성하고 싶습니다 . 그래서 내 디렉토리 A에는 다음이 있습니다.

ls : 
a.log
b.log
c.log

내가 달성하려는 의사 코드는 다음과 같습니다.

foreach *.log x do :
    if [stat -c %s pk_copylogs < 10485760]; then 
          cp  A/x  B/x       
    else
          read vANSWER?" >> File x is bigger than 10 MB, would you like to copy it anyway ? Type YES or NO : "
          if [ $vANSWER = "YES"]; then
              cp A/x B/x
          fi
    fi

여기서 내 주요 문제는 내 foreach *.log.

답변1

다음 두 가지 명령을 사용하여 이 작업을 수행할 수 있습니다.

find A -name "*.log" -size -10485760c -exec cp {} B/ +
find A -name "*.log" -size +10485760c -exec cp -i {} B/ +

첫 번째는 10485760보다 작은 파일을 찾아서 무분별하게 복사합니다. 두 번째는 10485760보다 큰 파일을 찾아서 대화형으로 복사하여 각 복사본을 묻는 메시지를 표시합니다.

단일 명령을 사용하여 필요에 따라 실행할 수 있도록 이를 쉘 스크립트나 함수에 넣습니다.

관련 정보