x個のフォルダがあります
folder1
folder2
folder3
......
folder100
私がしたいこと。
add folder2
reorder
だから今:
folder1
folder2
folder3
......
folder101
これで、フォルダ2のフォルダはフォルダ3になります。
例:フォルダ2 - >フォルダ3、フォルダ3 - >フォルダ4、フォルダ4 - >フォルダ5
フォルダ1は変更されていません。
より正確には、これを自動化したいと思います。
$ mkdir 1 2 3 4 5
$ ls
1 2 3 4 5
$ mkdir 2_1
$ ls
1 2 2_1 3 4 5
$ mv 5 6
$ ls
1 2 2_1 3 4 6
$ mv 4 5
$ mv 3 4
$ mv 2 3
$ mv 2_1 2
$ ls
1 2 3 4 5 6
$
Bashでこれを行うにはどうすればよいですか?
ベストアンサー1
for..
中括弧式を含む句を使用して、次のインライン算術だけでなく列挙も実行できます。
for f in {100..2} ; do mv $f $((f+1)) ; done
これにより、すべてのフォルダを100から2に1つの手順で「上に移動」できます。
より一般的には、フォルダ名パターンX_1で挿入点Xを見つけ、「穴パンチ」の前に最も高い番号のフォルダ名を見つけるスクリプトを使用できます。このような:
#!/bin/bash
X=*_1
F=( $(ls * | sort -nr) )
for f in {$F..${X%_1}} ; do mv $f $((f+1)) ; done
mv $X ${X%_1}
これは$F
すべてのフォルダ名の配列で、最大から最小までの数字でソートされているため、$F
それ自体が最大の数字です。また、形式は${X%_1}
「$X
端を削除_1
」を意味します。書式は$((f+1))
「値に 1 を加算するf
」を意味します。
スクリプトは、最も高い数を超える「挿入」を処理しません。