Skip to content

Instantly share code, notes, and snippets.

@saudiqbal
Last active July 2, 2026 17:46
Show Gist options
  • Select an option

  • Save saudiqbal/0b7ab59e552425c0a10a7fc449dd24d5 to your computer and use it in GitHub Desktop.

Select an option

Save saudiqbal/0b7ab59e552425c0a10a7fc449dd24d5 to your computer and use it in GitHub Desktop.
Bash script spanning folders for burning CD DVD or BLU RAY
#!/usr/bin/env bash
# Source https://stackoverflow.com/a/59742762/1433252
sourcedir="/home/saudiqbal/Documents/ServerFiles/"
destdir_prefix="/run/media/saudiqbal/HomeDrive/Temp/disk_"
destdir_suffix=""
mblimit=700
# DVD 4400 / 4300
# bytelimit=$(( mblimit * 1024 * 1024 )) # MB as measured by OS (MiB)
bytelimit=$(( mblimit * 1000 * 1000 )) # MB as measured by marketeers
disk=() # empty array
dir_size=0
find "${sourcedir}" -type f |
while read file; do
file_size="$( stat --printf="%s" "${file}" )"
disk_number=1
stored=false
while [[ "${stored}" == "false" ]]; do
if [[ "${disk[$disk_number]}" == "" ]]; then
disk[$disk_number]=1
fi
if [[ $(( disk[disk_number] + file_size )) -lt ${bytelimit} ]]; then
dir="${destdir_prefix}${disk_number}${destdir_suffix}"
mkdir -p "${dir}"
filedir="$(echo ${file} | sed 's|[^/]*$||g')"
filedir="$(echo ${filedir} | sed 's|'${sourcedir}'||g')"
mkdir -p "${dir}/${filedir}"
disk[$disk_number]=$(( disk[disk_number] + file_size ))
filenew="$(echo ${file} | sed 's|'${sourcedir}'||g')"
echo "${disk[$disk_number]} ${dir}/${filenew}"
cp "${file}" "${dir}/${filenew}"
stored=true
else
disk_number=$(( disk_number + 1 ))
fi
done
done
exit 0
@saudiqbal

Copy link
Copy Markdown
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment