我需要使用 DAV2fs 将大量文件复制到 Box.com。我发现我一次只能复制几份演出,然后我必须等待几分钟,直到盒子赶上或出错。
所以我所做的是使用“find ./ > outfile.txt”列出了所有文件/目录
我想遍历文件列表,在 100 个副本(或其他)之后等待 10 分钟。我该怎么做呢?不使用 cp -r,当 outfile.txt 如下所示:
/dirctory1
/directory1/file.txt
/directory1/file2.txt
cp 忽略目录,因此 file 和 file2 永远不会被复制。如果我执行 cp -r ,那么它将执行 directory1 及其所有内容,因此我的文件计数将关闭。
编辑:
澄清一下,我对 cp 部分感兴趣。具体来说,如何让 cp 在不执行 -r 的情况下创建目录,因为 -r 会导致我的计数失败。
答案1
尝试这个。 (未经测试。)
destination= # assign
i=0
while read line; do
cp --parents "$line" "$destination"
((i++))
[ $i -eq 100 ] && sleep 600 && i=0
done < outfile.txt
# or: done < <(find ... and so on) # to avoid creating the temp file
答案2
将“echo cp”更改为您的真实值cp
,然后执行以下操作。每处理 100 个文件后,它会休眠 10 分钟。它假设您的文件名中没有换行符,这样 outfile.txt 中的每一行都对应一个文件名。
#!/usr/bin/env bash
count=0
while IFS= read -r file
do
echo cp "$file" dest/
count=$((++count))
[[ $(($count % 100)) == 0 ]] && sleep $((10 * 60))
done < outfile.txt