[英]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.