const char *output,
unsigned long long split);
-const unsigned long long readArgument(int argc, char *argv[])
+typedef struct {
+ char *input;
+ char *output;
+ unsigned long long split;
+} param_t;
+
+param_t readArgument(int argc, char *argv[])
{
- unsigned long long split = 0;
+ param_t parameter = { NULL, NULL, 0 };
// Medien groessen
const unsigned long long bluray = 24159191040;
const unsigned long long cd = 734003200;
int c = 0;
- while ((c = getopt(argc, argv, ":59bcf:")) != -1) {
+ while ((c = getopt(argc, argv, ":59bcf:i:o:")) != -1) {
switch (c) {
+ case 'i':
+ parameter.input = optarg;
+ break;
+ case 'o':
+ parameter.output = optarg;
+ break;
case '5':
- split = dvd5;
+ parameter.split = dvd5;
break;
case '9':
- split = dvd9;
+ parameter.split = dvd9;
break;
case 'b':
- split = bluray;
+ parameter.split = bluray;
break;
case 'c':
- split = cd;
+ parameter.split = cd;
break;
case 'f':
- split = atoll(optarg);
+ parameter.split = atoll(optarg);
break;
case 'h':
+ default:
usage();
break;
}
}
- return split;
+ return parameter;
}
void print_human_read_size(const char *output, medium_t medium)
int main(int argc, char *argv[])
{
- if (argc <= 3) {
+ param_t parameter = readArgument(argc, argv);
+
+ if (parameter.input == NULL
+ || parameter.output == NULL
+ || parameter.split < 2048) {
usage();
- return 1;
+ exit(1);
}
- const char *input = argv[1];
- const char *output = argv[2];
- const unsigned long long split = readArgument(argc, argv);
+ if (access(parameter.input, F_OK) < 0) {
+ printf("ERROR: %s existiert nicht!\n", parameter.input);
+ exit(1);
+ }
status_print = print_human_read_size;
- run(input, output, split);
+ run(parameter.input, parameter.output, parameter.split);
return 0;
}
void usage()
{
- printf("\nUsage: discspan <input> <output> <option>\n\n");
- printf(" <input>\tTextdatei enthält alle Dateipfade,\n");
+ printf("\nUsage: discspan <option> -i <inputfile> -o <outputprefix>\n\n");
+ printf(" <inputfile>\tTextdatei enthält alle Dateipfade,\n");
printf("\t\tdie auf den Datenträger sollen\n");
- printf(" <output>\tTextdatei enthält alle Dateipfade,\n");
+ printf(" <outputprefix>\tTextdateien enthält alle Dateipfade,\n");
printf("\t\tdie auf den Datenträger passen\n\n");
printf(" option:\n");
+ printf(" -i <inputfile>\t\tPfad zur Quelldatei\n");
+ printf(" -o <outputprefix>\t\tPrefix der Ausgabedateien\n");
printf(" -b\t\tEntspricht der Größe einer BluRay: 25.000.000.000\n");
printf(" -9\t\tEntspricht der Größe einer Double Layer DVD: ");
printf("8.500.000.000 Bytes\n");
printf(" -5\t\tEntspricht der Größe einer Single Layer DVD: ");
printf("4.700.000.000 Bytes\n");
printf(" -c\t\tEntspricht der Größe einer CD: 734.003.200 Bytes\n");
- printf(" -f <Größe>\tOption zur Größenangabe in Bytes\n");
+ printf(" -f <size>\tOption zur Größenangabe in Bytes\n");
printf(" -h\t\tZeigt diese Hilfe an.\n\n");
}
2. discspan ausführen, um die Dateien auf ein DVD5 aufzuteilen
- discspan testfile medium -5
+ discspan -i testfile -o medium -5
3. Dateien herauskopieren mit rsync
cat medium | xargs -i cp -rl --parents {} /pfad/zum/wegkopieren
-## Command Line Options
-
-```console
-Usage: discspan <input> <output> <option>
-
- <input> Textdatei enthält alle Dateipfade,
- die auf den Datenträger sollen
- <output> Textdatei enthält alle Dateipfade,
- die auf den Datenträger passen
-
- option:
- -9 Entspricht der Größe einer Double Layer DVD: 8.497.902.848 Bytes
- -5 Entspricht der Größe einer Single Layer DVD: 4.697.902.848 Bytes
- -c Entspricht der Größe einer CD: 734.003.200 Bytes
- -f <Größe> Option zur Größenangabe in Bytes
-```
## Lizenz