![마지막 밑줄 뒤의 문자열을 삭제한 후 sed 명령을 사용하여 여러 파일의 이름을 바꿉니다. [닫기]](https://linux55.com/image/144437/%EB%A7%88%EC%A7%80%EB%A7%89%20%EB%B0%91%EC%A4%84%20%EB%92%A4%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%9C%20%ED%9B%84%20sed%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%AC%EB%9F%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4.%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
아래와 같이 디렉토리에 파일 세트가 있고 마지막 밑줄이 나타난 후 문자열을 제거하고 싶습니다. 문자열은 매번 다를 수 있습니다. 그것으로 그렇게 할 수 있다면 정말 좋을 것 같아요 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
하여 실제로 파일 이름을 바꾸세요.