在 unix 中批量重命名:将 digits_*.* 交换为 *_digits.*
Batch rename in unix: swap digits_*.* into *_digits.*
如果名称与特定模式匹配,我需要批量重命名文件列表,模式以 1 个或多个数字开头,后跟下划线,然后是字母数字。例如:“123_ABC123.txt”(扩展名可以是任何东西,不必是 'txt')。
我认为正则表达式应该是这样的:
\d+_*.*
但我不确定如何在 Unix 中实现它,具体来说,我如何表达第一部分 (\d+
) 应该与第二部分 (*
) 交换中间有下划线?
谢谢!
您可以使用这个 rename
command:
rename -n 's/^(\d+)_(.+)(\.[^.]+)$/_/' [0-9]*.*
123_ABC123.txt' would be renamed to 'ABC123_123.txt'
满意后可以删除 -n
(干 运行)选项。
解释:
^(\d+)
:匹配捕获组 #1 开头的 1+ 个数字
_
:匹配一个_
(.+)
:匹配捕获组 #2 中的 1+ 个任意字符
(\.[^.]+)$
:在第 3 组行结束前匹配要捕获的点和扩展名
_
:在捕获组 2 和 1 之间插入 _
,并在
中保留扩展名
使用您展示的示例,请尝试以下纯 BASH 解决方案。
这将打印 mv
(重命名) 命令,一旦您对此感到满意,您就可以使用实际代码重命名文件。
for file in [0-9]*.*
do
firstPart=${file%%_*}
secondPart1=${file%.*}
secondPart=${secondPart1#*_}
extension=${file##*.}
echo "File $file will be renamed to: ${secondPart}_${firstPart}.${extension}"
echo "mv \"$file\" " "\"${secondPart}_${firstPart}.${extension}\""
done
显示的名为 123_ABC123.txt
的文件的输出如下:
File 123_ABC123.txt will be renamed to: ABC123_123.txt
mv "123_ABC123.txt" "ABC123_123.txt"
注意: 一旦您对上述代码的结果感到满意,然后 运行 以下代码实际重命名文件:
for file in [0-9]*.*
do
firstPart=${val%%_*}
secondPart1=${val%.*}
secondPart=${secondPart1#*_}
extension=${val##*.}
echo "File $file will be renamed to: ${secondPart}_${firstPart}.${extension}"
mv "$file" "${secondPart}_${firstPart}.${extension}"
done
如果名称与特定模式匹配,我需要批量重命名文件列表,模式以 1 个或多个数字开头,后跟下划线,然后是字母数字。例如:“123_ABC123.txt”(扩展名可以是任何东西,不必是 'txt')。
我认为正则表达式应该是这样的:
\d+_*.*
但我不确定如何在 Unix 中实现它,具体来说,我如何表达第一部分 (\d+
) 应该与第二部分 (*
) 交换中间有下划线?
谢谢!
您可以使用这个 rename
command:
rename -n 's/^(\d+)_(.+)(\.[^.]+)$/_/' [0-9]*.*
123_ABC123.txt' would be renamed to 'ABC123_123.txt'
满意后可以删除 -n
(干 运行)选项。
解释:
^(\d+)
:匹配捕获组 #1 开头的 1+ 个数字_
:匹配一个_
(.+)
:匹配捕获组 #2 中的 1+ 个任意字符
(\.[^.]+)$
:在第 3 组行结束前匹配要捕获的点和扩展名_
:在捕获组 2 和 1 之间插入_
,并在 中保留扩展名
使用您展示的示例,请尝试以下纯 BASH 解决方案。
这将打印 mv
(重命名) 命令,一旦您对此感到满意,您就可以使用实际代码重命名文件。
for file in [0-9]*.*
do
firstPart=${file%%_*}
secondPart1=${file%.*}
secondPart=${secondPart1#*_}
extension=${file##*.}
echo "File $file will be renamed to: ${secondPart}_${firstPart}.${extension}"
echo "mv \"$file\" " "\"${secondPart}_${firstPart}.${extension}\""
done
显示的名为 123_ABC123.txt
的文件的输出如下:
File 123_ABC123.txt will be renamed to: ABC123_123.txt
mv "123_ABC123.txt" "ABC123_123.txt"
注意: 一旦您对上述代码的结果感到满意,然后 运行 以下代码实际重命名文件:
for file in [0-9]*.*
do
firstPart=${val%%_*}
secondPart1=${val%.*}
secondPart=${secondPart1#*_}
extension=${val##*.}
echo "File $file will be renamed to: ${secondPart}_${firstPart}.${extension}"
mv "$file" "${secondPart}_${firstPart}.${extension}"
done