0

我正在编写一个脚本,在其中迭代文件夹并重命名文件而不更改给定路径的扩展名。我正在使用 find 获取文件的路径 - 例如

abc/xyz/qwe.txt

现在我接受用户的文件名并想重命名文件

abc/xyz/myfile.txt

有什么办法可以解决这个问题。如何重命名文件?我试过下面的代码

find "$input_variable" -type f -name $word.* | while read file; do  mv $file | sed "s/$word/$replace/"; done;;

更新 试试这个

echo "Please Insert the path of the folder"
read input_variable

read -p "Enter the word to find = " word
read -p "Enter word to replace = " replace

find "$input_variable" -type f -name "$word.*" | while read file; 
do
    echo "$file"
    s="$file"
    d="`dirname $s`"
    f="`basename $s`"
    nf=$(echo $f | sed "s/^[^.]*\./$word./")
    newFileName="$d/$nf"
done
4

2 回答 2

1

这可能是一种方式:

find "$input_variable" -type f -name "$word.*" | while read file; do
    dir=${file%/*}
    base=${file##*/}
    ext=${base##*.}
    noext=${base:0:${#base} - ${#ext} - 1}
    newname=${noext/"$word"/"$replace"}.$ext
    echo mv "$file" "$dir/$newname"
done

当您确定它已经正确时,删除回声部分。

编辑:

find "$input_variable" -type f -name "$word.*" | while read file; do
    dir=${file%/*}
    base=${file##*/}
    noext=${base%.*}
    ext=${base:${#noext}}
    newname=${noext/"$word"/"$replace"}$ext
    echo mv "$file" "$dir/$newname"
done
于 2013-08-06T12:49:25.057 回答
0

再次更新它,因为 OP 似乎正在使用一些旧 shell:

使用dirnamebasename

s="abc/xyz/myfile.txt"
d="`dirname $s`"
f="`basename $s`"

mf="myfile"
nf=`echo $f | sed "s/^[^.]*\./$mf./"`
# merge the dir name and new file name
newFileName="$d/$nf"

测试:

$ echo "$newFileName"
abc/xyz/myfile.txt
于 2013-08-06T13:07:30.607 回答