N個のファイルを含むディレクトリを考えてみましょう。
ファイルをアルファベット順にリストし、次のようにリストを保存できます。
ls > list
その後、同じディレクトリにn個のサブディレクトリを作成したいと思います。
mkdir direc{1..n}
list
それでは、最初のm個または最初の5個(1-5)個のファイルをからに移動し、次のdirec1
5個のファイル(例えば6-10)をに移動したいと思いますdirec2
。
これはあなたに些細なことのように思えるかもしれませんが、私は現在それをすることはできません。助けてください。
ベストアンサー1
list=(*) # an array containing all the current file and subdir names
nd=5 # number of new directories to create
((nf = (${#list[@]} / nd) + 1)) # number of files to move to each dir
# add 1 to deal with shell's integer arithmetic
# brace expansion doesn't work with variables due to order of expansions
echo mkdir $(printf "direc%d " $(seq $nd))
# move the files in chunks
# this is an exercise in arithmetic to get the right indices into the array
for (( i=1; i<=nd; i++ )); do
echo mv "${list[@]:(i-1)*nf:nf}" "direc$i"
done
テスト後、「echo」コマンドをすべて削除します。
または、各ディレクトリに固定数のファイルを含めるには、次の方が簡単です。
list=(*)
nf=10
for ((d=1, i=0; i < ${#list[@]}; d++, i+=nf)); do
echo mkdir "direc$d"
echo mv "${list[@]:i:nf}" "direc$d"
done