リストからcpファイルへのBashスクリプト

リストからcpファイルへのBashスクリプト

DAV2fsを使用してBox.comに多数のファイルをコピーする必要があります。私は一度にいくつかのパフォーマンスしかコピーできないことを知り、箱が追いつくか何か間違っているまで数分待たなければなりませんでした。

だから私がしたことは、 "find ./>outfile.txt"を使ってすべてのファイル/ディレクトリをリストすることでした。

ファイルのリストを繰り返しながら、100コピー(または何でも)後10分を待ちたいです。どうすればいいですか? cp -r を使用しない場合、outfile.txt は次のように表示されます。

/dirctory1
/directory1/file.txt
/directory1/file2.txt

cpはディレクトリを無視するため、fileとfile2はコピーされません。 cp -rを実行すると、ディレクトリ1とすべての内容が実行されるため、ファイル数が減ります。

編集する:

明確にするためにcp部分に興味があります。具体的には、-rを実行せずにcpにディレクトリを作成させるにはどうすればよいですか?これによりカウントが失敗します。

答え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

関連情報