簡體   English   中英

linux使用bash腳本或命令行一行批量重命名文件

[英]linux rename files in bulk using bash script or command line one liner

我有一個列表,例如100個文件與命名約定

<date>_<Time>_XYZ.xml.abc
<date>_<Time>_XYZ.xml
<date>_<Time>_XYZ.csv

例如

20140730_025373_XYZ.xml
20140730_015233_XYZ.xml.ab
20140730_015233_XYZ.csv

現在我想編寫腳本,它將刪除兩個下划線之間的任何內容。 例如在上面的例子中

remove 015233 and change 20140730_015233_XYZ.xml.ab to 20140730_XYZ.xml.ab
remove 015233 and change 20140730_015233_XYZ.csv to 20140730_XYZ.csv

我已經嘗試了使用重命名,剪切,mv的各種選項的數量,但我得到了不同的結果,而不是我期望的結果。

如果要重命名當前目錄中的文件,可以使用rename命令,

rename 's/^([^_]*)_[^_]*(_.*)$/$1$2/g' *

你可以使用sed

sed 's/\([^_]*\)_.*_\(.*\)/\1_\2/' files.list

您也可以使用cut命令

cut -d'_' -f1,3 filename 
for FILE in *; do mv "$FILE" "${FILE/_*_/_}"; done

更具體的是

for FILE in *.xml *.xml.ab *.csv; do mv "$FILE" "${FILE/_*_/_}"; done

進一步:

for FILE in *_*_*.xml *_*_*.xml.ab *_*_*.csv; do mv "$FILE" "${FILE/_*_/_}"; done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM