1

我有一个外部驱动器,上面有超过 1TB 的项目文件。我需要重新格式化这个驱动器,以便重新组织它,但在此之前,我需要传输所有内容。问题是我在 Mac 上,驱动器被格式化为 NTFS,所以我所能做的就是从中复制。我试图简单地在 Finder 中复制和粘贴,但在以这种方式复制大约 15 分钟后,驱动器似乎锁定了。所以我决定编写一个 bash 脚本来一次遍历所有 1000 多个文件。这似乎适用于没有空格但在遇到空格时会跳过的文件。

到目前为止,这是我一起破解的内容。我在 bash 方面不太先进,所以任何关于如何处理空间的建议都会很好。

quota=800
size=`du -sg /Users/work/Desktop/TEMP`
files="/Volumes/Lacie/EXR_files/*"

for file in $files
do
    if [[ ${size%%$'\t'*} -lt $quota ]];
    then
        echo still under quota;
        cp -v $file /Users/work/Desktop/TEMP_EXR;
        du -sg /Users/work/Desktop/TEMP_EXR;
    else
        echo over quota;
    fi
done

(我正在检查目录大小,因为在将其全部复制回重新格式化的驱动器之前,我必须将此临时副本拆分到几个不同的位置。)

4

2 回答 2

5

希望我没有误会。如果文件名中的空格字符有问题,请引用它。如果您希望 bash 扩展其中的参数,请使用双引号。

cp -v "$file" /Users/work/Desktop/TEMP_EXR
于 2012-08-12T21:08:59.873 回答
0

您可以将所有文件名放在一个数组中,然后对其进行迭代。

quota=800
size=`du -sg /Users/work/Desktop/TEMP`
files=( /Volumes/Lacie/EXR_files/* )

for file in "${files[@]}"
do
    if [[ ${size%%$'\t'*} -lt $quota ]];
    then
        echo still under quota;
        cp -v "$file" /Users/work/Desktop/TEMP_EXR;
        du -sg /Users/work/Desktop/TEMP_EXR;
    else
        echo over quota;
    fi
done

需要注意的两件事是 1)在 for 列表中引用数组扩展,以及 2)$filecp命令中引用。

于 2012-08-13T13:28:22.117 回答