Initial commit

master
Avril 4 years ago
commit 8cece4b489
Signed by: flanchan
GPG Key ID: 284488987C31F630

4
.gitignore vendored

@ -0,0 +1,4 @@
test/
test.txt
*~
glue

@ -0,0 +1,5 @@
Hardlink files to a subdir path
e.g:
$ find | grep -iE '\.(jpg|png|gif)$' | glue ./image-backup

@ -0,0 +1,83 @@
package main
import (
"bufio"
"fmt"
"os"
"path"
"sync"
)
func oneechan(output chan string) {
reader := bufio.NewReader(os.Stdin)
for {
if text, err := reader.ReadString('\n'); err != nil {
fmt.Println("[e] Reading from stdin failed, closing: ", err)
break;
} else {
output <- text[:len(text)-1]
}
}
close(output)
}
var shadow bool = false
func worker(from, to string, wg *sync.WaitGroup) {
defer wg.Done()
if _, err := os.Stat(from); os.IsNotExist(err) {
fmt.Println("[w] input file does not exist: ",from)
return
} else {
fmt.Printf("[i] %v -> %v\n", from, to)
}
if !shadow {
parent_dir, _ := path.Split(to)
if _, err := os.Stat(parent_dir); os.IsNotExist(err) {
if err := os.MkdirAll(parent_dir, os.ModePerm); err != nil {
fmt.Printf("[e] failed to create structure `%s`: %v\n", parent_dir, err)
return
}
}
if err := os.Link(from, to); err != nil {
fmt.Printf("[e] failed to create hardlink `%s`: %v\n", to, err)
}
}
}
func imouto(root string, input chan string) {
var wg sync.WaitGroup
for from := range input {
to := path.Join(root, from)
wg.Add(1)
go worker(from, to, &wg)
}
wg.Wait()
}
func main() {
if len(os.Args) < 2 {
fmt.Println("usage: glue [--shadow] <path root>")
fmt.Println(" -shadow: do not link files or build directory structure")
return
}
i := 1
if os.Args[1] == "--shadow" {
shadow = true
i+=1
}
paths := make(chan string)
root := os.Args[i]
go oneechan(paths)
imouto(root, paths)
}
Loading…
Cancel
Save