
部分文字列でファイル名を変更したい。残念ながら、私のサーバーのすべてのファイル名が変更されたためです。
次に、サブディレクトリのファイルを含むすべてのファイルのサフィックス(.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%.*}"' _ {} \;