![동일한 파일 이름의 하위 문자열을 사용하여 파일 이름을 바꾸는 방법](https://linux55.com/image/40346/%EB%8F%99%EC%9D%BC%ED%95%9C%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%98%20%ED%95%98%EC%9C%84%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
하위 문자열로 파일 이름을 바꾸고 싶습니다. 불행히도 내 서버의 모든 파일 이름이 바뀌었기 때문입니다.
이제 하위 디렉터리의 파일을 포함하여 모든 파일의 접미사(.gz)를 제거하고 싶습니다.
다음은 엑스트라입니다 .gz
.
# pwd
/usr/apache-tomcat-6.0.36/webapps/rdnqa/WEB-INF/classes
# ls
META-INF jbpm.hibernate.cfg.xml.gz jbpm.jpdl.cfg.xml.gz jpdl-4.0.xsd.gz
config jbpm.hibernate.cfg.xml.mirror.gz jbpm.mail.templates.xml.gz jpdl-4.2.xsd.gz
ecnet jbpm.hibernate.cfg.xml.staging.gz jbpm.repository.hbm.xml.gz jpdl-4.3.xsd.gz
hibernate.queries.hbm.xml.gz jbpm.history.hbm.xml.gz jbpm.task.hbm.xml.gz jpdl-4.4.xsd.gz
jbpm.businesscalendar.cfg.xml.gz jbpm.identity.cfg.xml.gz jbpm.task.lifecycle.xml.gz labels
jbpm.cfg.xml.gz jbpm.identity.hbm.xml.gz jbpm.tx.hibernate.cfg.xml.gz log4j.properties.gz
jbpm.console.cfg.xml.gz jbpm.jboss.idm.cfg.xml.gz jbpm.tx.jta.cfg.xml.gz nohup.out.gz
jbpm.default.cfg.xml.gz jbpm.jbossremote.cfg.xml.gz jbpm.tx.spring.cfg.xml.gz
jbpm.default.scriptmanager.xml.gz jbpm.jobexecutor.cfg.xml.gz jbpm.variable.types.xml.gz
jbpm.execution.hbm.xml.gz jbpm.jpdl.bindings.xml.gz jbpm.wire.bindings.xml.gz
# cd ecnet
# ls
core jms rd util
# cd core
# ls
util
# cd util
# pwd
/usr/apache-tomcat-6.0.36/webapps/rdnqa/WEB-INF/classes/ecnet/core/util
# ls
GridService.class.gz MDPDFXMLParser.class.gz PDFColumn.class.gz PDFXMLParser.class.gz
GridService.java.gz MDPDFXMLParser.java.gz PDFColumn.java.gz PDFXMLParser.java.gz
MDExcelXmlParser.class.gz MasterDetailsPrintWriter.class.gz PDFRow.class.gz RGBColor.class.gz
MDExcelXmlParser.java.gz MasterDetailsPrintWriter.java.gz PDFRow.java.gz RGBColor.java.gz
MDExcleWriter.class.gz PDFCell.class.gz PDFWriter.class.gz xml2excel
MDExcleWriter.java.gz PDFCell.java.gz PDFWriter.java.gz
#
답변1
사용할 수 있습니다 rename
(이를 위해 설계되었습니다). 파일이 있는 폴더에서 이 명령을 실행하면 됩니다 *.gz
.
rename -n 's/\.gz$//' *.gz
이렇게 하면 .gz 확장자를 가진 모든 파일에서 .gz 확장자가 제거됩니다. 출력은 다음과 같아야 합니다.
hibernate.queries.hbm.xml.gz renamed as hibernate.queries.hbm.xml
jbpm.businesscalendar.cfg.xml.gz renamed as jbpm.businesscalendar.cfg.xml
jbpm.cfg.xml.gz renamed as jbpm.cfg.xml
...
노트:출력이 요구 사항을 충족하면 스위치 없이 명령이 실행됩니다 -n
. 이 스위치로 인해rename
아무 조치도 취하지 않고 이름이 변경될 파일만 표시합니다..
답변2
다음 스크립트가 도움이 될 수 있습니다.
for i in $(ls)
do
mv $i ${i%.gz} 2> /dev/null
done
기본적으로 디렉터리의 파일을 반복하고 끝에서 "gz"를 제거하여 파일 이름을 바꿉니다.
답변3
가장 간단하고 안전한 방법은 찾기 및 사용자 정의 명령을 사용하는 것입니다. 예를 들어:
find . -type f -name '*.gz' -exec bash -c 'n=$1; mv -- "$n" "${n%.*}"' _ {} \;