bash - Bash (Mac) - 将随机文件移动到具有“填充限制”的多个其他文件夹
问题描述
我在一个文件夹中有几百个文件,我想使用 bash 脚本将它们随机移动到多个不同的文件夹中 - 但是,我只想将每个目标文件夹填充到给定的容量.
我在想解决这个问题的正确方法是分配两个数组,一个包含所有目标文件夹,一个包含所有文件。然后我可以从 中随机取出一个文件filesarr
并将其放在目标文件夹中。我的问题是,如何限制每个目标文件夹中放置的文件数量?所以说我正在为每个目标文件夹寻找十个文件 - 如何将前十个文件从filesarr
中的第一个文件夹foldersarr
移动,然后将接下来的十个文件移动到中的第二个文件夹foldersarr
,直到所有文件都被移动?我知道我可能应该在这里使用计数器,但我目前的尝试(如下)并没有成功。
filesarr=(/Path/to/files/*) # this is the array of files to shuffle
foldersarr=(/Path/to/destination/folders/) # array of folders to move into
foldercount=0 # set it to 0
for afolder in "${foldersarr[@]}"; do
if [[ "$foldercount" -gt 10 ]]; then
echo "$foldercount files in folder, exiting and moving to next folder"
exit 1
else
for afile in "${filesarr[@]}"; do # do loop length(array) times; once for each file
length=${#filesarr[@]}
randomi=$(( $RANDOM % $length )) # select a random index
filename=${filesarr[$randomi]}
mv ${filename} ${foldersarr[@]}
echo "moving '$filename'"
foldercount=$((foldercount+1))
unset -v "filesarr[$randomi]" # unset after moved
array=("${filesarr[@]}") # remove NULL elements introduced by unset; copy array
done
fi
done
我当前的目录结构包含“保存”目录中的所有文件,以及我想将它们移动到单独文件夹中的所有目标文件夹。
rootfolder
│
├── holding
│ ├── dywd.pdf
│ ├── ... (approx. 200 files)
│ └── kjfwekfjnwe.pdf
│
└── destinations
├── folder01
├── ...
└── folder10
我想结束这个:
rootfolder
│
├── holding
│
└── destinations
├── folder01
│ ├── lwkejdwe.pdf
│ ├── ...
│ └── (ten files in this folder)
├── ...
│
└── folderXX
├── qwuoe.pdf
├── ...
└── (ten files in this folder)
解决方案
像这样的东西,(未测试)
dirs=(..) # array of dirs
dir_length=${#dirs[@]}
find -maxdepth 1 -type f | # or any other list of files
shuf |
while c=0 IFS= -r file;
do mv "$file" "{dirs[c++%$dir_length]}";
done
这将循环移动文件到目标目录。随机性是用 生成的shuf
,不需要单独维护文件列表。
推荐阅读
- c - 如何为 lex 和 yacc 指定输入缓冲区?
- mysql - 从共享公共字段的 4 个表中获取数据
- angular - 如何扩展 Angular 的 HTTP 客户端?
- python - 如何绘制包含不同 y 轴比例的多条线的数据集的 3D 时间序列?
- python - 从停止在单词“bye”上并取决于其位置的函数返回列表
- vba - 在 VBA 中是否有循环类型、函数或方法来清理 HTML 文件中节点的嵌套 For Each 循环?
- indexing - 尝试索引一个零值(字段'SpawnPoint)'
- git - 删除卡在 Git Push 的大文件
- javascript - 为什么未处理的承诺拒绝
- c++ - 如何使用命名空间的 Header 中的常量修复重新定义错误?