问题
I have 100s of files in a directory with the following naming convention.
00XYZCD042ABCDE20141002ABCDE.XML
00XYZCC011ABCDE20141002.TXT
00XYZCB165ABCDE20141002ABCDE.TXT
00XYZCB165ABCDE20141002ABCDE.CSV
I want to rename these files using bash
, awk
, cut
, sed
, so that I get the output:
XYZCD042.XML
XYZCC011.TXT
XYZCB165.TXT
XYZCB165.CSV
So basically, remove the first two 0s always, and then keep everything until ABCDE starts and then remove everything including ABCDE and keep the file extension.
回答1:
You could try the below rename
command,
rename 's/ABCDE.*(\..*)/$1/;s/^00//' *
Explanation:
s/ABCDE.*(\..*)/$1/
Matches all the characters from the firstABCDE
upto the last and captures only the extension part. Then all the matched chars are replaced with that captured extension.s/^00//
Then this would remove the leading two zeros.
回答2:
Bash only:
for fn in *; do
A=${fn#00}
mv $fn ${A/ABCDE*./.}
done
The first line in the for loop strips the 00 prefix, and the second line strips the ABCDE suffix (up to a dot), then performs the rename.
回答3:
for file in *
do
mv -- "$file" "${file:2:8}.${file#*.}"
done
It's important to always quote your variables unless you have a specific purpose in mind and understand all of the effects.
回答4:
for i in *; do
mv $i $(echo $i | sed -e 's/^00//' -e 's/ABCDE2014[^.]*//');
done
来源:https://stackoverflow.com/questions/26178469/rename-multiple-files-while-keeping-the-same-extension-on-linux