파일이 이미 존재하는 경우 숫자를 추가하여 파일 이름을 바꿉니다.

파일이 이미 존재하는 경우 숫자를 추가하여 파일 이름을 바꿉니다.

파일 이름을 바꾸고 파일이 이미 존재하는 경우 끝에 숫자를 추가하는 스크립트를 작성하고 싶습니다.

mv a.txt b.txt

b.txt가 이미 존재하므로 b.txt.1은 이름이 변경된 파일이 되며 이 작업을 다시 수행하면 b.txt가 존재하고 b.txt.1이 존재하므로 b.txt.2를 얻게 됩니다.

mv, mv --backup 옵션이 있다는 것을 알고 있지만 b.txt~.1~이 제공되지만 그 전후에는 ~를 원하지 않습니다. 숫자를 추가하는 또 다른 옵션이 있습니까?

답변1

예. 이제 스크립트 작성 의사를 밝혔으므로 이 작업을 완료하기 위해 알아야 할 사항은 다음과 같습니다.

  1. 파일이 존재하는지 테스트하십시오: 쉘 표현식 [ -e filename ]. man수행할 수 있는 다른 많은 테스트는 이 페이지를 참조하세요 . 사람들이 페이지를 더 잘 읽을 수 있도록 긴 페이지에서 항목을 검색하는 man방법을 배우는 데 익숙해지는 것이 좋습니다 . man일반적으로 최신 Linux는 브라우저를 man사용하도록 명령을 구성합니다 . less이렇게 하면 정규식을 사용하여 검색을 수행할 수 있으므로 /해당 옵션의 문서(거의 항상 한 줄로 시작함)를 찾을 수 있습니다. 반복하려면 누르세요.-e/^ *-e/

  2. 파일 이름에서 접미사 확장자를 제거합니다. 쉘 표현식이 ${var%.*}이 작업을 수행하므로 파일 이름을 변수에 저장하고 변수와 함께 수행하여 파일의 기본 이름을 가져옵니다.

  3. 파일 이름의 접미사 확장자를 가져옵니다. 셸 페이지를 ${var##*.}다시 살펴보세요 (예 : , ).manman shman bash

  4. 새 파일 이름을 만듭니다. 다음과 같습니다.new="${old%.*}${counter}${old##*.}"

  5. while따라서 새 파일 이름이 존재하지 않는지 확인하고 존재하는 경우 변수를 증가시키는 루프를 수행하려고 합니다 . 존재하지 않으면 mv해당 파일 이름을 대상으로 사용하여 작업을 수행하십시오.

  6. 쉘 스크립트에 변수를 추가하는 방법은 다음과 같습니다 count=$((++count)):

답변2

~에 따르면info '(coreutils) Backup options' 접미사로 숫자만 얻을 수 있는 방법은 없습니다. mv --backup=numbered결과는 이미 본 것입니다. mv --suffix=''결과는 단지 ~접미사(문서에도 불구하고) 일 뿐이며 mv --backup=numbered --suffix=''접미사를 무시하도록 병합됩니다.

관련 정보