In bash, you can move files using the mv
command. Here’s an example of how you could use mv
in a script:
#!/bin/bash
# Define the source and destination directories
src_dir="/path/to/source/directory"
dst_dir="/path/to/destination/directory"
# Use the `mv` command to move all files from the source directory to the destination directory
for file in "$src\_dir"/*; do
mv "$file" "$dst\_dir"
done
This script moves all files in the src_dir
to the dst_dir
. The for
loop iterates through all files in src_dir
and uses the mv
command to move each file to the dst_dir
.
Note: This script will overwrite any existing files in the dst_dir
with the same names as the files being moved. If you want to avoid overwriting existing files, you can modify the script to include a check for file existence in the destination directory before moving the file.
Here’s an example of how you could write a Go program to move files:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
srcDir := "/path/to/source/directory"
dstDir := "/path/to/destination/directory"
err := filepath.Walk(srcDir, func(path string, info os.FileInfo, err error) error {
if info.IsDir() {
return nil
}
relPath, _ := filepath.Rel(srcDir, path)
dstPath := filepath.Join(dstDir, relPath)
fmt.Printf("Moving file from %s to %s\n", path, dstPath)
return os.Rename(path, dstPath)
})
if err != nil {
fmt.Printf("An error occurred while moving files: %s\n", err)
return
}
fmt.Println("Files successfully moved.")
}
This program uses the filepath.Walk
function to iterate through all the files in the srcDir
directory. For each file, it uses filepath.Rel
to get the relative path of the file with respect to srcDir
, and then uses filepath.Join
to construct the destination path by joining the relative path with the dstDir
directory. Finally, it uses the os.Rename
function to move the file to the destination directory.
Note: This program will overwrite any existing files in the dstDir
with the same names as the files being moved. If you want to avoid overwriting existing files, you can modify the program to include a check for file existence in the destination directory before moving the file.
package main
import (
"fmt"
"html/template"
"io"
"os"
"path/filepath"
"strings"
"github.com/bitfield/script"
)
// basic go cli tool
func main() {
// go through each directory in go using os package
htmlFiles := []string{}
outputFolder := "gh-pages"
reg := []string{"rm", "-rf", outputFolder}
cmd := strings.Join(reg[:], " ")
tmpl := `
<html>
<head>
<title>List of Matlab Reports and Files</title>
</head>
<body>
<h1>List of Files</h1>
<ul>
{{ range . }}
<li><a href={{.}}>{{ . }}</a></li>
{{ end }}
</ul>
</body>
</html>
`
It looks like you’re starting to write a Go program to generate an HTML file that lists all of the files in a directory, and move the generated HTML file to an outputFolder
. Here’s an example of how you could complete this program:
package main
import (
"fmt"
"html/template"
"io/ioutil"
"os"
"path/filepath"
"strings"
)
func main() {
htmlFiles := []string{}
outputFolder := "gh-pages"
srcDir := "."
err := filepath.Walk(srcDir, func(path string, info os.FileInfo, err error) error {
if !info.IsDir() {
htmlFiles = append(htmlFiles, path)
}
return nil
})
if err != nil {
fmt.Printf("An error occurred while reading files: %s\n", err)
return
}
tmpl := template.Must(template.New("index").Parse(`
<html>
<head>
<title>List of Files</title>
</head>
<body>
<h1>List of Files</h1>
<ul>
{{ range . }}
<li><a href={{.}}>{{ . }}</a></li>
{{ end }}
</ul>
</body>
</html>
`))
f, err := os.Create("index.html")
if err != nil {
fmt.Printf("An error occurred while creating index.html: %s\n", err)
return
}
defer f.Close()
if err := tmpl.Execute(f, htmlFiles); err != nil {
fmt.Printf("An error occurred while executing the template: %s\n", err)
return
}
err = os.MkdirAll(outputFolder, os.ModePerm)
if err != nil {
fmt.Printf("An error occurred while creating the output folder: %s\n", err)
return
}
src, err := os.Open("index.html")
if err != nil {
fmt.Printf("An error occurred while opening index.html: %s\n", err)
return
}
defer src.Close()
dst, err := os.Create(filepath.Join(outputFolder, "index.html"))
if err != nil {
fmt.Printf("An error occurred while creating the output file: %s\n", err)
return
}
defer dst.Close()
_, err = io.Copy(dst, src)
if err != nil {
fmt.Printf("An error occurred while copying index.html: %s\n", err)
return
}
fmt.Println("Files successfully moved.")
}
This program
script.FindFiles(".").FilterScan(func(line string, w io.Writer) {
// if line contains html print it
if strings.Contains(line, ".html") || strings.Contains(line, ".pdf") {
fmt.Fprintf(w, "scanned line: %q\n", line)
htmlFiles = append(htmlFiles, line)
}
}).Stdout()
fmt.Println(htmlFiles)
// create html directory
script.Exec("mkdir " + outputFolder).Stdout()
// for each html file
for _, file := range htmlFiles {
reg = []string{"cp", file, outputFolder}
cmd = strings.Join(reg[:], " ")
// copy file to html directory
script.Exec(cmd).Stdout()
}
// move ads.txt to html directory
script.Exec("mv ads.txt " + outputFolder).Stdout()
The code you posted implements a basic Go CLI tool that moves HTML and PDF files to a new directory named “gh-pages”. Here’s a brief explanation of the code:
github.com/bitfield/script
package to scan the current directory for files that contain “.html” or “.pdf” in their name. The matching files are then stored in the htmlFiles
slice.script.Exec
function to create the “gh-pages” directory using the mkdir
command.htmlFiles
slice and uses script.Exec
to copy each file to the “gh-pages” directory using the cp
command.script.Exec
to move the “ads.txt” file to the “gh-pages” directory using the mv
command.Note that this code only implements the file moving part of the deployment to Github Pages, you might need to write additional code to deploy the files to Github Pages.
if err != nil {
fmt.Println(err)
return
}
file, err := os.Create(outputFolder + "/index.html")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
// remove outputFolder from htmlFiles
for i, file := range htmlFiles {
// get basename of file
baseName := filepath.Base(file)
htmlFiles[i] = baseName
}
err = t.Execute(file, htmlFiles)
if err != nil {
fmt.Println(err)
return
}
The code you posted creates an HTML file named “index.html” in the “gh-pages” directory and writes the list of files in the htmlFiles
slice to the HTML file. Here’s a brief explanation of the code:
os.Create
function.htmlFiles
slice and retrieves the base name of each file using the filepath.Base
function. The base name is stored back in the htmlFiles
slice.t.Execute
function to write the htmlFiles
slice to the “index.html” file. The t.Execute
function uses the template defined in the tmpl
variable to format the HTML output.Note that the code also contains error handling to check for any errors that might occur during the file creation and writing process. If an error occurs, the code prints the error message and returns from the main function.
# run go main.go and install and then deploy to gh-pages
name: deploy
on:
push:
branches: [master]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.19
- name: Build
run: |
go build -o main .
./main
echo google.com, pub-2479144310234386, DIRECT, f08c47fec0942fa0 > ads.txt
mv ads.txt ./gh-pages
- name: Deploy to gh-pages
uses:
peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./gh-pages
The code you posted is a GitHub Actions workflow that builds and deploys a Go program to GitHub Pages. Here’s a brief explanation of the code:
Note that the workflow uses the latest version of Ubuntu for the build environment and that the “gh-pages” directory contains the generated HTML file and other files that will be deployed to GitHub Pages.
That’s great! Hosting your old university assignments on GitHub Pages can be a valuable way to showcase your previous work and demonstrate your skills to potential employers or collaborators. GitHub Pages also provides a platform for you to easily share your work with others and collaborate on projects in the future.