Bash脚本-创建文件夹并将文件移动到其中(每个文件夹中的特定文件数)

Bash脚本-创建文件夹并将文件移动到其中(每个文件夹中的特定文件数),bash,shell,directory,Bash,Shell,Directory,我想寻求有关创建文件夹和将文件移动到其中的代码的帮助。我想创建文件夹,放置以特定扩展名结尾的文件,并且每个文件夹中只有一定数量的文件。例如,我有10个文本文件,创建5个文件夹,每个文件夹有两个文件。文件的名称有1.txt、2.txt等,10.txt。所以1.txt和2.txt应该在文件夹1中,3.txt和4.txt应该在文件夹2中,依此类推 我的代码如下所示: end=2 sta=1 for i in {1..5} do mkdir "$i" for file in *.txt:

我想寻求有关创建文件夹和将文件移动到其中的代码的帮助。我想创建文件夹,放置以特定扩展名结尾的文件,并且每个文件夹中只有一定数量的文件。例如,我有10个文本文件,创建5个文件夹,每个文件夹有两个文件。文件的名称有1.txt、2.txt等,10.txt。所以1.txt和2.txt应该在文件夹1中,3.txt和4.txt应该在文件夹2中,依此类推

我的代码如下所示:

end=2
sta=1
for i in {1..5}
do
    mkdir "$i"
    for file in *.txt:
    do
        mv "{$sta..$end}.txt" "$i"
    done
    end=$((end+2))
    begin=$((begin+2))

done
它应该类似于它,但我有一个错误,mv:cannotstat'{1..10}.txt':没有这样的文件或目录

我知道这将是一个简单的改变,但无法理解。我已经完成了前面的问题,但无法对代码进行排序


谢谢

您可以尝试的算术替换版本,如下所示:

对于i=1;我试试看:

#!/bin/bash

sta=1
end=2
countFileInFolder=2
countFolders=5
filePath='/tmp/txt'
scriptDir=$(dirname $(readlink -f ${BASH_SOURCE}))

# create files for test
for (( k=1; k<=$(($countFolders*$countFileInFolder )); k++ )); do
  > "$filePath/$k.txt"
done

for (( i=1; i<=$countFolders; i++ )); do
    if [[ ! -d "$i" ]]; then mkdir "$i"; fi
  for (( n=$sta; n<=$end; n++ )); do
    if [[ ! -f "$i" ]]; then mv "$filePath/$n.txt" "$scriptDir/$i"; fi
  done
  sta=$(($sta+$countFileInFolder))
  end=$(($end+$countFileInFolder))
done
如前所述

bash在变量扩展之前进行大括号扩展,因此 每周。{0..4}。因为结果是可预测和安全的,所以不要相信 用户输入,您可以在您的案例中使用eval:

end=2
sta=1
for i in {1..5}
do
    mkdir -p "$i"
    for file in *.txt:
    do
        eval "mv {$((sta))..$((end))}.txt $i"
    done
    end=$((end+2))
    sta=$((sta+2))
done
$WEEKS_TO_SAVE=4 $eval mkdir-p weekly.{0..$WEEKS___SAVE}

注:

eval是邪恶的,请小心使用eval,$。。用于强制 要作为整数表达式计算的变量

因此,让我们在您的案例中使用eval:

end=2
sta=1
for i in {1..5}
do
    mkdir -p "$i"
    for file in *.txt:
    do
        eval "mv {$((sta))..$((end))}.txt $i"
    done
    end=$((end+2))
    sta=$((sta+2))
done

谢谢你的回复。。。我可以创建目录,但无法将文件移动到指定的文件夹中。