在(最后一个)目录之后重命名文件

Rename file after (last) directory

我正在尝试将 bash 中的文件重命名为最新的文件名。结构如下:

directories..../Test1/abc.txt
directories..../Test2/abc.txt
directories..../Test3/abc.txt

我想结束

directories..../Test1/Test1.txt
directories..../Test2/Test2.txt
directories..../Test3/Test3.txt

现在我被困在这里:

pathname=/mnt/grid/*

for file in /mnt/grid/*/*.txt; do
    mv "$file" "$(dirname "$file")/$(basename ${pathname}.txt)"
done

查找包含文件的目录名称运行basename "$(dirname "$file")"。例如:

$ file=/tmp/foo/bar.txt
$ basename "$(dirname "$file")"
foo

这样就不需要pathname,循环体可以简单的

echo "$file" "$(dirname "$file")/$(basename "$(dirname "$file")").txt"

(如果看起来正确,请将 echo 替换为 mv。)