Bash 如何使用每个目录的名称重命名多个目录中的多个文件

Bash 如何使用每个目录的名称重命名多个目录中的多个文件,bash,rename,Bash,Rename,重命名文件夹中的所有文件时遇到问题,我在此处找到了一个简单的解决方案: 但我注意到它只对文件夹中的单个文件有效,如何对每个文件夹中包含多个文件的多个目录有效 我有这个例子 test_folder/ results_folder1/ file_1.csv file_2.csv file_3.csv file_4.csv ... results_folder2/ file_1.csv file_2.csv

重命名文件夹中的所有文件时遇到问题,我在此处找到了一个简单的解决方案:

但我注意到它只对文件夹中的单个文件有效,如何对每个文件夹中包含多个文件的多个目录有效

我有这个例子

test_folder/
   results_folder1/
     file_1.csv
     file_2.csv
     file_3.csv
     file_4.csv
     ...

   results_folder2/
     file_1.csv
     file_2.csv
     file_3.csv
     file_4.csv
     ...
得到这个

test_folder/
   results_folder1/
     results_folder1_1.csv
     results_folder1_2.csv
     results_folder1_3.csv
     results_folder1_4.csv
     ...

   results_folder2/
     results_folder2_1.csv
     results_folder2_2.csv
     results_folder2_3.csv
     results_folder2_4.csv
     ...

我想我可以使用重命名,但如何才能适应这种情况,
提前感谢大家

您可以循环查看
查找的结果

for f in $(find . -type "f" -printf "%P\n"); do
  mv $f $(dirname $f)/$(basename $(dirname $(readlink -f $f)) | tr '/' '_')_$(basename $f); 
done
说明:递归查找所有常规文件,从当前目录开始,打印相对路径(每行一个),无前导
,将其存储在变量
f
中。对于每个
f
,重命名为[目录部分的
f
]
//code>[目录名的基本名称的
f
(即
f
所在的父目录名),所有
/
字符替换为
.
.
.
[文件名药剂的
f
]


使用
find
$(dirname$f)/$(basename$(dirname$(readlink-f$f))
中的额外复杂性允许嵌套目录的级别超过1级。

将链接的解决方案包装在一个循环中(例如,
用于dir1 dir2中的top…;do(cd“$top”;linked\u solution\u此处);已完成
将其应用于每个顶级目录。如果遇到问题,请将您的尝试添加到问题中。如果成功,您可以添加并接受自己的答案。好的,我将尝试一个for循环,谢谢,伙计