if-then 문을 약간 다르게 복제하고 있는데... 그렇게 하면 안 됩니다.

if-then 문을 약간 다르게 복제하고 있는데... 그렇게 하면 안 됩니다.

이 작업을 수행하는 더 좋은 방법이 있다는 것을 알고 있지만 답변을 찾을 수 있는 올바른 위치를 찾고 있지 않습니다.

나는숫자이러한 유형의 명령문(예: 1-100 또는 다른 파일 이름 목록). 기본적으로 나는 그것들을 모두 확인한 다음 동일한 유형의 명령을 실행합니다.

if [ -f ~/file1 ];
    if [ -f ~/Backup/file1 ];
       rm ~/파일1;
       # 언젠가는 파일 크기나 파일 날짜 확인도 할 수도 있을 것입니다(평가 조사).
    기타
       cp -ip ~/파일1 ~/백업/파일1;
       rm ~/파일1;
   필리핀 제도
필리핀 제도

이 항목을 반복해서 복사하여 붙여넣을 필요 없이 이것을 함수로 만들 수 있는 방법(file1로 한 번 반복한 다음 file2로 다시 반복하는 등)이 있어야 합니다.

나는 초보자들에게 명확한 것을 원합니다. 일단 작업을 시작하면 아마도 5년 동안 다시 보지 않을 것이고, 다시 시작하면 그다지 명확하지 않은 모든 것을 잊어버릴 것이기 때문입니다. 이것의 장점은 무슨 일이 일어나고 있는지 명확하게 알 수 있다는 것입니다 :P

나는 이것을 수행하는 일부 코드를 읽고 "음, 그거 흥미롭네요. 3-4개 이상의 if-thes를 수행해야 할 때 이것을 사용해야 합니다."라고 말했지만 그냥 작성하지 않았습니다.


일부 파일은 filename001, filename002, ...filename100입니다.

특정 이름의 파일에도 동일한 문제가 있습니다. 이 경우 파일 이름 목록을 반복하고 (코드를 복사하여 붙여넣는 대신) 새 파일 이름을 목록에 추가하고 싶습니다.

명령줄을 통해 아무 것도 입력하고 싶지 않습니다. 모든 것이 스크립트에 나열됩니다(그래서 테스트할 수 있으므로 입력하고 싶지 않은 것을 망치거나 잘못 입력할 수 없습니다). 스크립트에 의해 호출된 각 파일 이름을 한 줄씩 나열하는 데이터 파일에 대한 아이디어는 나에게 흥미로웠지만 이를 구현하는 방법을 잘 모르겠습니다. 링크가 있나요?


왜냐하면 이것은많은더 쉽고 효율적입니다.

나는 그것이 가능하다는 것을 알고 있지만 프로그래밍을 할 수 없는 사람들(즉, 5년 후의 나)에게 프로그래밍 방법을 정말로 모르는 곳에서 시작할 때, 그리고 거기에 있다는 것을 분명히 해야 합니다. 굴러가는 때가 될 것입니다. 많은 것들이 잊혀집니다(다른 사람에게 넘겨지지 않으면)). 나는 기본적으로 내가 이해할 수 있는 것들을 취하여 내 목적에 맞게 남용할 수 있을 때까지 작업합니다. 이제 컴퓨터는 내가 하고 있는 작업 유형에 맞춰 충분히 빠르기 때문에 내 스크립트가 매우 효율적일 필요는 없습니다.


백업 파일이 존재하면 현재 파일을 삭제합니다(있는 경우).그것존재합니다 - 존재하지 않는 경우 스크립트가 다음 가능성으로 계속 진행되기를 원합니다. 백업이 존재하지 않으면 현재 파일을 복사하고 있습니다(할당량 등을 초과하면(다른 것이 복사 중에 할당량을 발생/흡수할 수 있음) 오류가 발생하고 복구할 수 없는 항목은 삭제되지 않기를 바랍니다) 그런 다음 삭제합니다. 현재 파일.

백업 파일이 유용한지 테스트하기 위해 타임스탬프(어떤 것이 더 최신인가요?), 크기(어느 것이 더 큰가요?), 해시(파일이 정확히 복사되고 있나요?) 등 몇 가지 사항을 추가해도 괜찮습니다. 지금 당장 필요합니다.

답변1

글쎄, 내 생각엔 당신이 루프를 찾고 있는 것 같아요.

cd ~; i=1000; set --
until [ "$((i+=1))" -gt 1100 ]
do    _i=${i#1}
      if    [ -f ./file"$_i" ] && 
            [ -f ./Backup/file"$_i" ]
      then  rm ./file"$_i"
      else  set -- ./file"$_i" "$@"
      fi
done
[ "$#" -gt 0 ]                  &&
cp -ip "$@" ./Backup  &&
rm "$@"

이는 최대 100까지 계산되고 필요에 따라 즉시 루프를 닫아 file[001-100]복사해야 하는 파일 배열을 구축합니다 . 실제로 쉘 배열 대신 명명된 배열을 사용하기로 선택한 경우에도 동일한 작업을 수행할 수 있습니다.cp -iprm

최대 100까지 0으로 채워지는 반복자(초기 -gt평가에서는 중단되었습니다)그러나 작성된 대로 스크립트를 상당히 쉽게 수정하여 최대 999개의 파일을 처리할 수 있습니다.

관련 정보