아래와 같이 디렉토리에 파일 세트가 있고 마지막 밑줄이 나타난 후 문자열을 제거하고 싶습니다. 문자열은 매번 다를 수 있습니다. 그것으로 그렇게 할 수 있다면 정말 좋을 것 같아요 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
하여 실제로 파일 이름을 바꾸세요.