例如:我在一个文本文件中保存了 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
该部分的说明sed
:sed -n "4,8p" file
将打印文件的第 4 行到第 8 行。