例:テキストファイルに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
異なるインデックス整数を使用して2つのループを実行し、テキストファイル内の場所に応じてファイルアドレスを指定できます。
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行目が印刷されます。