运行具有不同行为部分的 for 循环

运行具有不同行为部分的 for 循环

例如:我在一个文本文件中保存了 100 个文件夹名称,如何在同一for循环中为每 10 个名称应用不同的命令行?换句话说,如果我想用不同的名称重命名每 10 个文件夹,如何mv在同一个 for 循环中对文本文件中的每 10 个项目应用该命令?

#!/bin/bash -f
source=PATH TO THE DATA (100 FOLDERS)
for f in $(cat text.txt); do 
mv ${source}/"old folder name" ${source}/" new folder name"
done

答案1

由于它们位于文本文件中,因此您可以使用for不同的索引整数运行两个循环,并通过文件在文本文件中的位置来寻址文件:

for (( i=0 ; i<=9 ; i++ )) ; do
  newpos=$i_files
  for (( j=1 ; j<=10 ; j++ )) ; do
     mv "$( sed -n "$(( $i*10+$j ))p" filelist)" "$newpos"
  done
done

因为它是关于mv你甚至可以使用输入文件的块sed

 for (( i=0 ; i<=9 ; i++ )) ; do
    newpos=$i_files
    mv "$( sed -n "$(( $i*10+1 )),$(( ($i+1)*10 ))p" filelist)" "$newpos"
 done

该部分的说明sedsed -n "4,8p" file将打印文件的第 4 行到第 8 行。

相关内容