파일을 새 이름으로 복사 - 가장 짧은 방법

파일을 새 이름으로 복사 - 가장 짧은 방법

디렉토리에는 특정 확장자를 가진 약 150개의 파일이 있습니다. 예를 들면 다음과 같습니다.

abc.ext
def.ext
ghi.ext
...

이제 이 모든 파일을 확장자 없이 새 파일 이름으로 복사하고 싶습니다.

abc
def
ghi

이 작업을 수행하는 가장 짧은 방법은 무엇입니까? bash 파일을 작성하지 않고 루프를 작성할 수 있습니까?

편집: 답변해 주셔서 감사합니다(dirkt, John Newman).
답변을 본 후에는 루프가 있더라도 더 짧은 답변을 고수하겠습니다.

답변1

스크립트("bash 파일")를 작성하지 않고도 가능하지만 루프를 사용하지 않으면 불가능합니다.

for f in *.ext ; do cp -- "$f" "$(basename "$f" .ext)" ; done

basename접미사를 제거하는 데 사용할 수 있습니다.

답변2

루프가 없는 것이 확실히 가능합니다. 알았어... 이건 너에게 맡기겠다.

$ find . -type f -name "*.ext" -print0 | xargs -0 -I {} echo cp -T {} {}SUB | sed -e 's/\.extSUB//g'

준비 모드를 종료하려면 sh에 파이프를 연결합니다. $IFS를 처리하지 않는 한 백틱은 개행 문자를 제거하므로 쓸모가 없습니다. 앞서 언급했듯이 백틱에는 다른 문자 문제가 있습니다. 마지막 인수에는 일반적으로 디렉터리가 필요하므로 cp -T도 필요합니다.

위에 언급할 만큼 "담당자"가 충분하지 않지만, ${}이를 피하기 위해 bash와 함께 다양한 트릭을 사용할 수 있습니다 basename.

하위 문자열: ${f:0:-4} 또는 가장 긴 일치 항목:${f%%.ext}

관련 정보