각 파일 이름에서 일부 문자열을 제거하는 방법

각 파일 이름에서 일부 문자열을 제거하는 방법

[root@localhost ~]# ls *.bak

test2.bak test3.bak test9.bak test.bak test.txt.bak

.bak모든 파일의 모든 내용을 삭제하는 방법은 무엇입니까 ? 이것이 나의 현재 시도이다

ls *.bak|xargs -t -i mv {}.bak {}

그러나 이것은 나에게 효과가 없습니다. 여기에 해결 방법이 있나요?

답변1

루프는 다음을 수행해야 합니다(POSIX와 유사한 셸에서):

for f in *.bak; do 
    mv -- "$f" "${f%.*}"
done

한 줄:

for f in *.bak; do mv -- "$f" "${f%.*}"; done

답변2

사용rename주문하다:

rename 's/\.bak$//' *.bak

  • 's/\.bak$//'-진주표현식은 다음으로 끝나는 모든 파일 이름과 일치하고 .bak확장자를 제거합니다.

답변3

모든 플랫폼에서 작동해야 하는 것:

for i in *.bak
do
  mv $i `echo $i | sed 's/\.bak$//'`
done

답변4

#!/bin/bash
for val in \`ls *.bat`
do
    mv $val `echo $val | cut -f1 -d'.'`
done

관련 정보