| set -euo pipefail | |
| readonly SOURCE_DIR=${1:-$HOME/public_databases} | |
| readonly TARGET_DIR=${2:-/mnt/disks/ssd/public_databases} | |
| mkdir -p "${TARGET_DIR}" | |
| FILES=(pdb_seqres_2022_09_28.fasta \ | |
| uniprot_all_2021_04.fa \ | |
| mgy_clusters_2022_05.fa \ | |
| uniref90_2022_05.fa \ | |
| bfd-first_non_consensus_sequences.fasta \ | |
| rfam_14_9_clust_seq_id_90_cov_80_rep_seq.fasta \ | |
| nt_rna_2023_02_23_clust_seq_id_90_cov_80_rep_seq.fasta \ | |
| rnacentral_active_seq_id_90_cov_80_linclust.fasta) | |
| NOT_COPIED_FILES=() | |
| while (( ${#FILES[@]} )); do | |
| # Get total size of files to copy in bytes | |
| SOURCE_FILES=( "${FILES[@]/#/${SOURCE_DIR}/}" ) | |
| TOTAL_SIZE=$(du -sbc "${SOURCE_FILES[@]}" | awk 'END{print $1}') | |
| # Get available space on target drive in bytes | |
| AVAILABLE_SPACE=$(df --portability --block-size=1 "$TARGET_DIR" | awk 'END{print $4}') | |
| # Compare sizes and copy if enough space | |
| if (( TOTAL_SIZE <= AVAILABLE_SPACE )); then | |
| printf 'Copying files... %s\n' "${FILES[@]}" | |
| echo "From ${SOURCE_DIR} -> ${TARGET_DIR}" | |
| for file in "${FILES[@]}"; do | |
| cp -r "${SOURCE_DIR}/${file}" "${TARGET_DIR}/" & | |
| done | |
| break | |
| else | |
| NOT_COPIED_FILES+=("${FILES[-1]}") | |
| unset 'FILES[-1]' | |
| fi | |
| done | |
| printf 'No room left on ssd for: %s\n' "${NOT_COPIED_FILES[@]}" | |
| wait | |