목록에서 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

관련 정보