steffen
steffen

Reputation: 31

Bash, move and rename files to base parent directory name

I have a bunch of base-parent-folders with different names.

In each of these base-parent-folders i have a folder with same same name(result).

In each of the result folders, i have a result file (data.txt), also named the same in each base-parent-folder.

I need to move all the data.txt files to a new folder (newfolder), and rename them to the base-parent-folder name.

for name in ./*/*/data.txt; do 
mv "$name" "../newfolder/$(basename -- "$(dirname -- "$name")").txt";
done 

This will move the file but rename the data.txt files to result.txt, and not the unique base-parent-folder name.

Help is much appreciated :D

What i have:

data\data1\result\data.txt

data\data2\result\data.txt

data\data3\result\data.txt

data\data4\result\data.txt

data\data5\result\data.txt

What i want:

data\newfolder\data1.txt

data\newfolder\data2.txt

data\newfolder\data3.txt

data\newfolder\data4.txt

data\newfolder\data5.txt

Upvotes: 0

Views: 607

Answers (1)

steffen
steffen

Reputation: 31

for f in */*/data.txt; 
    do mv "$f" "./newfolder/${f%/*/*}.txt"; 
    done  

Worked for me. The ./ part did not work. It wanted to add a additional folder called . when moving the file.

Thanks for the help

Upvotes: 0

Related Questions