Bash脚本 - 遍历文件夹并移动到1000的文件夹中

时间:2012-03-15 15:32:20

标签: linux bash sh

我有120万个文件分成文件夹,如下:

Everything
..........Folder 1
..................File 1
..................File 2
..................File 3
..................File 4
..................File 5 etc 
..........Folder 2
..................File 1
..................File 2
..................File 3
..................File 4
..................File 5 etc 

如果我cd进入Folder 1我可以运行以下脚本将文件整理到名为123等文件夹中。每个1000个文件:

dir="${1-.}"
x="${2-1000}"

let n=0
let sub=0
while IFS= read -r file ; do
    if [ $(bc <<< "$n % $x") -eq 0 ] ; then
            let sub+=1
            mkdir -p "$sub"
            n=0
    fi

    mv "$file" "$sub"
    let n+=1
done < <(find "$dir" -maxdepth 1 -type f)

但是我真的想在顶层的Everything文件夹上运行一次。从那里它会考虑子文件夹,并进行by-1000排序,这样我就可以将所有内容从Folder 1Folder 2等移到1000个项目的文件夹中,每个项目都称为123

有什么想法吗?

编辑:以下是我希望文件结束的方式(根据评论):

Everything
..........Folder1
.................file1(these filenames can be anything, they shouldnt be renamed)
.................(every file in between so file2 > file 999)
.................file1000
..........Folder2  
.................file1001
.................(every file in between so file1002 > file file1999)
.................file2000

原始文件夹结构中的每个可能文件都被分组到顶层下1000个项目的文件夹中。

2 个答案:

答案 0 :(得分:0)

假设您的脚本名为organize.sh,而 Everything 文件夹仅包含目录。请尝试以下方法:

cd Everything
for d in *; do
    pushd $d
    bash ~/temp/organize.sh
    popd
done

更新

在评论中回答Tom的问题:你只需要一份organizational.sh的副本。假如你把它放在〜/ temp中,那么你可以调用上面更新的。

答案 1 :(得分:-2)

Pseudo Algo:

1) Do ls for all your directories and store them in a file.
2) Do cd into each directory you copied into your file.
3) Sort all your files
4) Do cd ..
5) Repeat step 2-4 in a for loop.
相关问题