批量重命名具有不同扩展名Linux Script的多个文件?

Geo*_*ley 4 linux shell scripting batch-rename

我想编写一个linux脚本,将所有文件移动或复制到具有相同文件名(但扩展名不同)的文件到所有这些文件的新文件名,同时保持不同的扩展名.换一种说法:

如果我从目录列表开始:

file1.txt, file1.jpg, file1.doc, file12.txt, file12.jpg, file12.doc

我想编写一个脚本来更改所有文件名而不更改扩展名.对于相同的示例,选择file2作为新文件名,结果将是:

file2.txt, file2.jpg and file2.doc, file12.txt, file12.jpg, file12.doc

因此,不会更改其文件名与当前条件不匹配的文件.

最好的祝愿,

乔治

ple*_*siv 5

注意:如果存在file1.doc变量i,则表达式${i##*.}提取扩展名,即doc在这种情况下.


一线解决方案:

for i in file1.*; do mv "$i" "file2.${i##*.}"; done
Run Code Online (Sandbox Code Playgroud)

脚本:

#!/bin/sh
# first argument    - basename of files to be moved
# second arguments  - basename of destination files
if [ $# -ne 2 ]; then
    echo "Two arguments required."
    exit;
fi

for i in $1.*; do
    if [ -e "$i" ]; then
        mv "$i" "$2.${i##*.}"
        echo "$i to $2.${i##*.}";
    fi
done
Run Code Online (Sandbox Code Playgroud)