다음과 같은 디지털 파일이 있습니다.
test01-aaa.txt
test02-bbb.txt
test03-ccc.txt
test04-ddd.txt
이름에서 aaa, bbb, ccc, ddd 부분을 제거해야 합니다. 내가 할 수 있는 최선은 무엇인가? 명령을 사용해 보았지만 'rename'
어떻게 이런 식으로 사용할 수 있습니까?
rename -v "test??-*.txt" "test??.txt" *.txt
다음과 같은 파일이 있습니다.
test01.txt
test02.txt
test03.txt
test04.txt
답변1
쉘의 간단한 루프(이것은 다음과 같은 사실을 피합니다.rename
이 유틸리티에는 여러 가지 충돌하는 변형이 있습니다.):
for name in test??-*.txt; do
mv "$name" "${name%%-*}.txt"
done
이 루프는 주어진 패턴과 일치하는 현재 디렉터리의 모든 이름을 반복합니다. 이러한 각 이름에 대해 -
표준 인수 대체를 사용하여 첫 번째 문자열 끝에서 문자열 끝을 자릅니다. 교체는 ${variable%%pattern}
변수 값에서 일치하는 가장 긴 접미사 문자열을 제거합니다. 그런 다음 대체 결과에 접미사를 다시 추가합니다.pattern
variable
.txt
bash
셸 에서는 nullglob
일치하는 파일 이름 없이 단일 반복이 실행되지 않도록 루프를 실행하기 전에 셸 옵션을 설정해야 할 수도 있습니다.
mv
GNU 시스템(또는 mv
GNU coreutils가 있는 모든 시스템) 에서 개체 파일이 이미 존재하는 경우 해당 개체 파일을 사용 -b
하거나 백업할 수 있습니다. --backup
그렇지 않은 경우 -b
위의 루프는 기존 파일을 덮어쓰는 방식으로 이름 충돌을 처리합니다.