通过bash将文件从一个目录排序并复制到另一个目录

时间:2014-06-18 10:28:46

标签: linux bash

我在一个目录中有大约400万个扩展名文件。

我需要一个bash脚本将它们复制到另一个目录中,以便每个目录将这些文件分类为1000个文件。

EG。 源目录是/temp/hugenooffiles/

文件名类似于m_100, m_1005, m_10005等。

目标目录为/temp/sortedfiles/

在目标目录中,应创建一个名为1的目录,其中包含m_1m_999的文件。

应创建

directory 2,其中包含文件m_1000m_1999,依此类推。

目标文件应重命名为1_m, 1000_m等。

此外,如果目标文件夹中的文件已存在,则应覆盖它们。

请帮助。

2 个答案:

答案 0 :(得分:0)

#!/bin/bash

SOURCE='/temp/hugenooffiles'
DEST='/temp/sortedfiles'

I=0
for FILE in "$SOURCE"/m_*; do
    (( D = 1 + ++I / 1000 ))
    [[ -d $DEST/$D ]] || mkdir -p "$DEST/$D"  ## You can just skip dir checking but that would be slow.
    cp -v "$FILE" "$DEST/$D/m_$I"
done

注意:默认情况下,Bash("$SOURCE"/m_*)中的路径名扩展已排序。

答案 1 :(得分:0)

我修改了konsolebox的脚本并完成了这项工作。谢谢。

> #!/bin/bash
> 
> SOURCE='/temp/hugenooffiles' 
> DEST='/temp/sortedfiles'
> 
> I=0 
> for FILE in "$SOURCE"/m_*;
> do
>     (( D = (( ${FILE#*_} / 1000 )) + 1 ))
>     [[ -d $DEST/$D ]] || mkdir -p "$DEST/$D"
>     mv -v "$FILE" "$DEST/$D/${FILE#*_}_m"
>     (( ++I )) 
> done