]> Creatis software - clitk.git/blob - scripts/dcm_sort_by_field.sh
sorted directory is put outside the original one
[clitk.git] / scripts / dcm_sort_by_field.sh
1 #!/bin/bash
2 if [ $# -lt 1 ]
3 then
4     echo Usage: dcm_sort_by_field.sh \"field name\"
5     exit
6 fi
7 path_dir=`pwd`
8 dir_name=`basename "$path_dir"`
9 [ -d "../${dir_name}_sorted" ] && rm -r "../${dir_name}_sorted"
10 mkdir "../${dir_name}_sorted"
11 find . -type f -iname "*.dcm" > ../${dir_name}_sorted/dicom_files
12 finished=0
13 total=$(wc -l ../${dir_name}_sorted/dicom_files)
14 cat ../${dir_name}_sorted/dicom_files | while :
15 do
16     jobrunning=0
17     conc_jobs=50
18     while [ $jobrunning -lt $conc_jobs ]
19     do
20         read i || { wait; break 2; }
21         {
22             name="$(clitkDicomInfo "$i" | grep "$1" | head -n 1 | sed "s/.*\[//;s/.$//;s/ /_/g")"
23             [ -z "$name" ] && echo "Warning: key not found in file $i" 1>&2 && mkdir -p "../${dir_name}_unsorted" && basename=$(basename "$i") && cp -l "$i" "../${dir_name}_unsorted/$basename" && exit 1 #copy to unsorted directory if dicom key not found
24             #[ -z "$name" ] && echo "Warning: key not found in file $i" 1>&2 && exit 1 #don't do anything if dicom key not found
25             name=`echo "$name" | sed 's/\//_/g'`
26             name=`echo "$name" | sed 's/\\\/_/g'`
27             name=`echo "$name" | sed 's/\*/_/g'`
28             [ -d "../${dir_name}_sorted/$name" ] || mkdir "../${dir_name}_sorted/$name" 2>>/dev/null
29             basename=$(basename "$i")
30             cp -l "$i" "../${dir_name}_sorted/$name/$basename"
31         }&
32         jobrunning=$(( $jobrunning + 1 ))
33     done
34     finished=$(( $finished + $conc_jobs  ))
35     echo -e -n "( $finished / $total )\r"
36     wait
37 done
38 rm ../${dir_name}_sorted/dicom_files