使用shell脚本重命名来自不同目录的多个文件

使用shell脚本重命名来自不同目录的多个文件,shell,Shell,我有50个目录,每个目录中都有一个名为hist_anh_abs_0的文件。所以我有50份 name hist_anh_abs_0 我想要的是以下内容,我想要在所有50个目录上运行一个循环,它将拉出文件名hist_anh_abs_0,并将其重命名为hist_anh_abs_0_1,hist_anh_abs_0_2。。。最后将所有重命名的文件放在一个单独的目录中。 我做了这样的事 对于hist_anh_abs_0中的文件 做 mv-i“${file}”“${file/-\u abs\u 0-/-\

我有50个目录,每个目录中都有一个名为hist_anh_abs_0的文件。所以我有50份

name hist_anh_abs_0
我想要的是以下内容,我想要在所有50个目录上运行一个循环,它将拉出文件名
hist_anh_abs_0
,并将其重命名为
hist_anh_abs_0_1
hist_anh_abs_0_2
。。。最后将所有重命名的文件放在一个单独的目录中。 我做了这样的事

对于hist_anh_abs_0中的文件 做 mv-i“${file}”“${file/-\u abs\u 0-/-\u abs\u 0\u$i-}” 完成



但是我不能做这样的部分,它将读取所有目录并查找名为hist_anh_abs_0的文件

我们如何知道将哪个文件编号为什么?数字重要吗?还是不?不,没关系你有没有试过?解决它?如果你在hist_anh_abs_0 do mv-i“${file}”${file/-abs_0-/-abs_0-/-abs_0-$i-}”甜甜圈中遇到文件处理问题,我们可以帮你解决。但我不能做第一部分,它将读取所有目录并查找hist_anh_abs 0文件。我们如何知道哪个文件将被编号为什么?数字重要吗?还是不?不,没关系你有没有试过?解决它?如果你在hist anh_abs_0 do mv-i“${file}”${file/-abs_0-/-abs_0-/-abs_0$i-}”甜甜圈中遇到为文件执行此操作的问题,我们可以帮助你解决,但我无法完成第一部分,即它将读取所有目录并查找hist anh_abs 0的文件。但是,当您在*/hist_anh_abs_0中为f写入ct=0时,程序是否会读取所有50个dir并提取文件名'hist_anh_abs_0'?这是for语句列表中的*/,假设这是从50个目录的父目录执行的。还需要设置destdir,但不清楚您希望目标目录位于何处。但如果我运行脚本,它会告诉mv:无法将“Quantas\u 10000\u 561\u 638/hist\u anh\u abs\u 0”移动到“HIS\u anh\u abs\u 0/Quantas\u 10000\u 561\u 638/hist\u anh\u abs\u 0\u 29”:没有这样的文件或目录,并且所有文件都会出错。啊,我漏了一点。我们需要使用$f的basename来剥离目录部分。试试这个:ct=0;对于f in*/hist_anh_abs_0 do mv$f${destdir}/
basename$f
\u$((ct++));DonethBaseName部分应该在反引号中。对不起,我是stackoverflow的noob,所以我还没有弄清楚标记。谢谢Tim。但是,当您在*/hist_anh_abs_0中为f写入ct=0时,程序是否会读取所有50个dir并提取文件名'hist_anh_abs_0'?这是for语句列表中的*/,假设这是从50个目录的父目录执行的。还需要设置destdir,但不清楚您希望目标目录位于何处。但如果我运行脚本,它会告诉mv:无法将“Quantas\u 10000\u 561\u 638/hist\u anh\u abs\u 0”移动到“HIS\u anh\u abs\u 0/Quantas\u 10000\u 561\u 638/hist\u anh\u abs\u 0\u 29”:没有这样的文件或目录,并且所有文件都会出错。啊,我漏了一点。我们需要使用$f的basename来剥离目录部分。试试这个:ct=0;对于f in*/hist_anh_abs_0 do mv$f${destdir}/
basename$f
\u$((ct++));DonethBaseName部分应该在反引号中。对不起,我是stackoverflow的noob,所以我还没有弄清楚标记。
ct=0 ;
for f in */hist_anh_abs_0 
do 
  mv $f ${destdir}/${f}_$((ct++));
done