-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsplit_script.sh
More file actions
62 lines (52 loc) · 1.85 KB
/
Copy pathsplit_script.sh
File metadata and controls
62 lines (52 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/bin/bash
# Source directory passed as an argument
SOURCE_DIR=$1
# Target base directory passed as an argument
TARGET_BASE=$2
MAX_SIZE=$((500*1024*1024*1024)) # 500GB in bytes
MIN_SIZE=$((550*1024*1024*1024)) # 550GB in bytes
LOGFILE="split_log.txt"
PROCESSED_LOG="processed_folders.txt"
# Function to find the next available folder number
get_next_folder_number() {
local num=1800
while [[ -d "${TARGET_BASE}/01-${num}" ]]; do
num=$((num + 1))
done
echo $num
}
# Function to check if a folder has already been processed
has_been_processed() {
local folder=$1
grep -q "^${folder}$" $PROCESSED_LOG
return $?
}
FOLDER_NUMBER=$(get_next_folder_number)
mkdir -p "${TARGET_BASE}/01-${FOLDER_NUMBER}"
touch $PROCESSED_LOG
for folder in "${SOURCE_DIR}"/*/; do
if has_been_processed "$folder"; then
echo "$folder has already been processed. Skipping."
continue
fi
FOLDER_SIZE=$(du -sb "${folder}" | cut -f1)
if [[ $FOLDER_SIZE -lt $MIN_SIZE ]]; then
echo "$folder is smaller than the minimum size. Skipping."
echo "Skipped ${folder} due to size < 550GB" >> $LOGFILE
continue
fi
if [[ $((CURRENT_SIZE + FOLDER_SIZE)) -le $MAX_SIZE ]]; then
echo "Moving ${folder} to ${TARGET_BASE}/01-${FOLDER_NUMBER}/" >> $LOGFILE
mv "${folder}" "${TARGET_BASE}/01-${FOLDER_NUMBER}/"
CURRENT_SIZE=$((CURRENT_SIZE + FOLDER_SIZE))
else
FOLDER_NUMBER=$(get_next_folder_number)
echo "Creating folder: ${TARGET_BASE}/01-${FOLDER_NUMBER}" >> $LOGFILE
mkdir "${TARGET_BASE}/01-${FOLDER_NUMBER}"
echo "Moving ${folder} to ${TARGET_BASE}/01-${FOLDER_NUMBER}/" >> $LOGFILE
mv "${folder}" "${TARGET_BASE}/01-${FOLDER_NUMBER}/"
CURRENT_SIZE=$FOLDER_SIZE
fi
# Mark the folder as processed
echo "${folder}" >> $PROCESSED_LOG
done