终端环境下从80GB视频文件夹迁移30GB文件的方法咨询
终端环境下从80GB视频文件夹迁移30GB文件的方法咨询
嗨,我来帮你搞定这个终端里迁移指定大小视频文件的问题~ 下面给你两种实用的纯终端操作方法,完全不用装GUI工具:
方法一:按文件名顺序累加迁移(快速凑够30GB)
如果你不在乎具体移动哪些视频,只要总大小接近30GB就行,这个方法最省心:
先创建目标文件夹(如果还没的话):
mkdir -p /path/to/your/target_folder记得把路径替换成你实际要存放视频的文件夹位置。
写个简单的自动迁移脚本:
新建一个名为move_videos.sh的文件,内容如下:#!/bin/bash # 替换成你的源视频文件夹路径 SOURCE="/path/to/your/source_videos" # 替换成你的目标文件夹路径 TARGET="/path/to/your/target_folder" # 把30GB转换成字节(1GB=1024*1024*1024字节) MAX_SIZE=$((30 * 1024 * 1024 * 1024)) CURRENT_SIZE=0 # 遍历源文件夹里的所有文件 for file in "$SOURCE"/*; do # 只处理普通视频文件,跳过子文件夹 if [ -f "$file" ]; then # 获取当前文件的字节大小 FILE_SIZE=$(stat -c%s "$file") # 检查加上这个文件后是否超过30GB上限 if [ $((CURRENT_SIZE + FILE_SIZE)) -le $MAX_SIZE ]; then mv "$file" "$TARGET/" CURRENT_SIZE=$((CURRENT_SIZE + FILE_SIZE)) echo "已移动:$file | 当前累计大小:$((CURRENT_SIZE / 1024 / 1024)) MB" else echo "已接近30GB上限,停止迁移。" break fi fi done给脚本加执行权限并运行:
chmod +x move_videos.sh ./move_videos.sh
方法二:按文件大小排序后迁移(优先移小/大文件)
如果你想优先移动小文件(或者大文件),可以先按大小排序再累加,比如优先移小文件的脚本:
#!/bin/bash SOURCE="/path/to/your/source_videos" TARGET="/path/to/your/target_folder" MAX_SIZE=$((30 * 1024 * 1024 * 1024)) TOTAL=0 # 按文件大小从小到大排序,逐个判断是否迁移 du -b "$SOURCE"/* | sort -n | while read size file; do if [ $((TOTAL + size)) -le $MAX_SIZE ]; then mv "$file" "$TARGET/" TOTAL=$((TOTAL + size)) echo "已移动 $file,当前累计大小:$((TOTAL / 1024 / 1024)) MB" else break fi done
如果想优先移大文件,把sort -n改成sort -nr即可。
实用小提示
- 先测试再执行:可以先把脚本里的
mv改成echo mv,这样脚本只会打印要移动的文件,不会实际操作,确认没问题再改回mv。 - 处理子文件夹:如果源文件夹里还有嵌套子文件夹,把遍历逻辑换成
find "$SOURCE" -type f,就能递归处理所有子文件夹里的视频。 - 权限问题:确保你对源文件夹和目标文件夹都有读写权限,遇到权限报错可以尝试加
sudo(谨慎使用,避免误操作)。
备注:内容来源于stack exchange,提问作者Mr.Sajjad
相关产品推荐
相关产品推荐

