파일 이름을 바꾸고 파일이 이미 존재하는 경우 끝에 숫자를 추가하는 스크립트를 작성하고 싶습니다.
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
예. 이제 스크립트 작성 의사를 밝혔으므로 이 작업을 완료하기 위해 알아야 할 사항은 다음과 같습니다.
파일이 존재하는지 테스트하십시오: 쉘 표현식
[ -e filename ]
.man
수행할 수 있는 다른 많은 테스트는 이 페이지를 참조하세요 . 사람들이 페이지를 더 잘 읽을 수 있도록 긴 페이지에서 항목을 검색하는man
방법을 배우는 데 익숙해지는 것이 좋습니다 .man
일반적으로 최신 Linux는 브라우저를man
사용하도록 명령을 구성합니다 .less
이렇게 하면 정규식을 사용하여 검색을 수행할 수 있으므로/
해당 옵션의 문서(거의 항상 한 줄로 시작함)를 찾을 수 있습니다. 반복하려면 누르세요.-e
/^ *-e
/
파일 이름에서 접미사 확장자를 제거합니다. 쉘 표현식이
${var%.*}
이 작업을 수행하므로 파일 이름을 변수에 저장하고 변수와 함께 수행하여 파일의 기본 이름을 가져옵니다.파일 이름의 접미사 확장자를 가져옵니다. 셸 페이지를
${var##*.}
다시 살펴보세요 (예 : , ).man
man sh
man bash
새 파일 이름을 만듭니다. 다음과 같습니다.
new="${old%.*}${counter}${old##*.}"
while
따라서 새 파일 이름이 존재하지 않는지 확인하고 존재하는 경우 변수를 증가시키는 루프를 수행하려고 합니다 . 존재하지 않으면mv
해당 파일 이름을 대상으로 사용하여 작업을 수행하십시오.쉘 스크립트에 변수를 추가하는 방법은 다음과 같습니다
count=$((++count))
:
답변2
~에 따르면info '(coreutils) Backup options'
접미사로 숫자만 얻을 수 있는 방법은 없습니다. mv --backup=numbered
결과는 이미 본 것입니다. mv --suffix=''
결과는 단지 ~
접미사(문서에도 불구하고) 일 뿐이며 mv --backup=numbered --suffix=''
접미사를 무시하도록 병합됩니다.