I am trying to rename files in my bash to their latest file name. The structure is as follows:
directories..../Test1/abc.txt
directories..../Test2/abc.txt
directories..../Test3/abc.txt
I want to end up with
directories..../Test1/Test1.txt
directories..../Test2/Test2.txt
directories..../Test3/Test3.txt
Right now I am stuck here:
pathname=/mnt/grid/*
for file in /mnt/grid/*/*.txt; do
mv "$file" "$(dirname "$file")/$(basename ${pathname}.txt)"
done
To find the name of the directory containing a file run basename "$(dirname "$file")"
. For example:
$ file=/tmp/foo/bar.txt
$ basename "$(dirname "$file")"
foo
This way there's no need for pathname
, and the loop body can simply be
echo "$file" "$(dirname "$file")/$(basename "$(dirname "$file")").txt"
(Replace echo
with mv
if this looks right.)