如何在命令行中移动一定大小的文件夹?

时间:2014-12-07 17:12:26

标签: bash shell find mv

在我的外置硬盘中,我有两个分区,一个用于Mac,另一个用于Windows(FAT32)。由于Time Machine备份我的Mac分区几乎已满,我想将一些旧的文件夹(其中包括电影)从Mac分区移动到Windows分区。但是,FAT32文件系统只允许每个文件小于4GB。但我的一些文件夹包含大于4G的文件。我不想手动浏览每个文件夹,检查大小然后复制&粘贴小尺寸的文件夹。

所以我的问题是:

将小于4GB的所有文件夹(包括子目录)移动到新分区的命令是什么?它与mv命令的选项有什么关系吗?

由于

--- 2014年12月7日更新---

我跑了find . -mindepth 1 -type d -exec bash -c 'f="$1";set $(du -bs "$f"); \ [[ $1 -lt 4294967296 ]] && echo mv "$f" /dest-dir' - '{}' \; >> output.txt

以下是我输出的第几行:

Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.stZBByQJc0/Render
BASH=/bin/bash
BASH_ARGC=([0]="1")
BASH_ARGV=([0]=".")
BASH_EXECUTION_STRING=$'f="$1";set $(du -bs "$f"); \\\n        [[ $1 -lt 4294967296 ]] && echo mv "$f" /Volumes/WIN_PANC/movies/'
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="53" [3]="1" [4]="release" [5]="x86_64-apple-darwin14")
BASH_VERSION='3.2.53(1)-release'
CLICOLOR=1
COLORFGBG='15;0'

它们不是我想要移动的文件夹。我做对了吗?

2 个答案:

答案 0 :(得分:1)

您可以使用此find命令列出文件大于4GB的目录:

find . -mindepth 1 -type d -exec bash -c 'f="$1"; read s _ < <(du -s "$f"); \
        [[ $s -lt 4194304 ]] && echo mv "$f" /dest-dir' - '{}' \;

在您对列表感到满意后,在echo命令之前删除mv

答案 1 :(得分:0)

使用以下代码可以为您执行此操作(对于文件&gt; 4G

#! /bin/bash
my_files=`ls --almost-all -1v -s -A --block-size=G|sort|sed -e 's#^[0-4]*G##g' -e '$ s#.*##g'`
echo "$my_files" >> my_files.txt
while read -r file; do
echo "MOVING FILE : $file"
mv "$file"  "destination_location"
sleep 0.5
done < my_files.txt
rm -rf my_files.txt

注意:将目录更改为终端中要复制的所有文件的位置,然后您可以从同一终端运行脚本。确保将“destination_location”替换为要将文件移动到代码中的目录。然后执行脚本。

注意:您必须更改目录并在每个目录中运行代码。

相关问题