用于将数千个文件放入单独文件夹的bash脚本

时间:2017-03-13 08:51:15

标签: bash shell sh

在目录中,我有数千个文件。

我使用以下bash片段,以便将这些数千个文件放入文件夹中,每个文件包含1000个文件,

我面临两个问题:

a)现在每个文件夹都有一个dir_的前缀,而我希望它有一个名字,它有6位数字,如果文件夹名称少于6位,则应该正确添加前导零。

b)当前脚本,将第一个文件夹放入最后一个文件夹,例如,我将dir_400325作为最后一个文件夹,在那里,我找到了我运行的bash脚本,以及dir_1000文件夹,这是第一个文件夹创建。我怎么能改变这个,所以第一个文件夹没有存储到最后一个?

#!/斌/庆典

c=0; d=1000; mkdir -p dir_${d}

for file in *
do
        if [ $c -eq 1000 ]
        then
                d=$(( d + 1000 )); c=0; mkdir -p dir_${d}
        fi
        mv "$file" dir_${d}/
        c=$(( c + 1 ))
done

1 个答案:

答案 0 :(得分:1)

您可以使用%06d和格式字符串生成带有前导零(bash-4.4$ d=1001 bash-4.4$ dir_name=$(printf "/path/to/%06d" $d) bash-4.4$ echo $dir_name /path/to/001001 )的6位数目录名称,在shell中演示:

#!/bin/bash

c=0
d=1000
dir_name=$(printf "/path/to/%06d" $d)
mkdir -p $dir_name

for file in *
do
    if [ $c -eq 1000 ]
    then
        c=0
        d=$(( d + 1000 ))
        dir_name=$(printf "/path/to/%06d" $d)
        mkdir -p $dir_name
    fi
    if [[ -f "$file" ]]
    then
      mv "$file" $dir_name
      c=$(( c + 1 ))
    fi
done

使用绝对路径可能有助于确保文件最终位于您预期的位置,而不是当前工作目录的某个子文件夹中。

rm ~/.why3.conf
why3 config --detect