我有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
我可以运行以下脚本将文件整理到名为1
,2
,3
等文件夹中。每个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 1
,Folder 2
等移到1000个项目的文件夹中,每个项目都称为1
,2
,3
等
有什么想法吗?
编辑:以下是我希望文件结束的方式(根据评论):
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个项目的文件夹中。
答案 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.