마지막 밑줄 뒤의 문자열을 삭제한 후 sed 명령을 사용하여 여러 파일의 이름을 바꿉니다. [닫기]

마지막 밑줄 뒤의 문자열을 삭제한 후 sed 명령을 사용하여 여러 파일의 이름을 바꿉니다. [닫기]

아래와 같이 디렉토리에 파일 세트가 있고 마지막 밑줄이 나타난 후 문자열을 제거하고 싶습니다. 문자열은 매번 다를 수 있습니다. 그것으로 그렇게 할 수 있다면 정말 좋을 것 같아요 sed.

입력 파일:

com_101_00000_0001_a234.txt
com_101_retail_00000_0002_g345.ctl
com_101_lines_003_0002_1134.txt

결과 파일 이름:

com_101_00000_0001.txt
com_101_retail_00000_0002.ctl
com_101_lines_00003_0002.txt

답변1

시스템에 perl이 있는 경우 rename다음을 수행할 수 있습니다.

rename -n 's/_[^_]+?\././' *

파일이 같은 이름으로 끝날 수 있는 경우 덮어쓰지 않으려면 다음을 사용하세요 -i.

rename -in 's/_[^_]+?\././' *

예상한 내용이라면 삭제 -n하여 실제로 파일 이름을 바꾸세요.

정말로 구두주걱을 고집한다면 sed다음과 같이 불필요하게 복잡한 일을 할 수 있습니다.

for f in *_*.*; do
    new=$(printf "%s\n" "$f" | sed 's/\(.*\)_[^_]*\(\.[^_]*\)$/\1\2/')
    echo mv "$f" "$new"
done

또는 그렇지 않은 경우 sed더 현명하게:

for f in *_*.*; do echo mv "$f" "${f%_*}.${f##*.}" ; done

마지막 두 예의 경우 예상과 일치하면 삭제 echo하여 실제로 파일 이름을 바꾸세요.

관련 정보