Ithy Logo

如何抓取GitHub子目錄中的所有檔案

全面指南:多種方法及詳細步驟

GitHub repository files

主要重點

  • 運用SVN或Git工具,可以高效下載特定子目錄
  • 第三方插件與線上工具提供便捷的下載選項
  • 根據需求選擇適合的方法,確保獲取所需檔案

方法一:使用SVN工具

步驟詳解

SVN(Subversion)是一種版本控制工具,GitHub支持部分SVN協議,允許用戶直接下載特定子目錄。以下以實例說明如何下載GitHub子目錄中的所有檔案。

步驟一:安裝SVN工具

根據您的操作系統,使用以下命令安裝SVN:

# 在Ubuntu/Debian系統上
sudo apt-get install subversion

# 在macOS上使用Homebrew
brew install svn

# 在Windows上,請從<a href="https://subversion.apache.org/" target="_blank">Subversion官方網站</a>下載並安裝

步驟二:確定子目錄的URL

假設您要抓取的GitHub儲存庫URL為 https://github.com/exampleuser/example-repo,欲下載的子目錄為 path/to/subdir,請構造SVN的檔案地址:

https://github.com/exampleuser/example-repo/trunk/path/to/subdir

步驟三:使用SVN下載子目錄

執行以下命令將子目錄下載到當前目錄:

svn checkout https://github.com/exampleuser/example-repo/trunk/path/to/subdir

此命令將下載 path/to/subdir 目錄中的所有檔案到當前工作目錄。

方法二:使用Git Sparse Checkout

步驟詳解

Git的sparse checkout功能允許用戶僅檢出Git儲存庫中的特定部分,從而避免下載整個儲存庫。以下是具體操作步驟:

步驟一:克隆儲存庫

git clone https://github.com/exampleuser/example-repo.git
cd example-repo

步驟二:啟用sparse checkout

git sparse-checkout init --cone

步驟三:設定要檢出的子目錄

git sparse-checkout set path/to/subdir

步驟四:拉取檔案

git pull origin main

執行完以上命令後,指定的子目錄 path/to/subdir 將被檢出到本地。

方法三:使用GitZip插件

步驟詳解

GitZip是一款Chrome瀏覽器插件,允許用戶輕鬆地從GitHub下載特定的子目錄或檔案。以下是安裝與使用步驟:

步驟一:安裝GitZip插件

打開Chrome瀏覽器,前往Chrome網上應用店,搜索並安裝“GitZip”插件。

步驟二:使用GitZip下載子目錄

  1. 打開欲下載子目錄的GitHub儲存庫頁面,例如 https://github.com/exampleuser/example-repo
  2. 導航至目標子目錄,例如 path/to/subdir
  3. 點擊瀏覽器工具欄中的GitZip插件圖標。
  4. 在彈出的介面中選擇欲下載的子目錄或檔案,然後點擊下載按鈕。

GitZip將生成一個ZIP文件供您下載,包含所選擇的檔案或子目錄。

方法四:使用第三方線上工具

步驟詳解

有許多線上工具提供GitHub子目錄下載功能,例如“GitHub Directory Downloader”。以下是使用此工具的步驟:

步驟一:訪問GitHub Directory Downloader網站

前往GitHub Directory Downloader網站。

步驟二:輸入子目錄URL

在輸入框中粘貼欲下載子目錄的GitHub URL,例如:

https://github.com/exampleuser/example-repo/tree/main/path/to/subdir

步驟三:下載ZIP文件

點擊下載按鈕,線上工具會自動將指定子目錄打包成ZIP文件,供您下載。

方法五:使用GitHub API自動化下載

步驟詳解

GitHub提供REST API,允許開發者通過編程方式獲取儲存庫中的檔案。以下是一個使用Python腳本下載子目錄檔案的示例:

步驟一:準備工作

確保您的系統已安裝Python及相關的requests庫。如果沒有,您可以使用以下命令安裝requests庫:

pip install requests

步驟二:撰寫Python腳本

import requests
import os

# 配置
BASE_URL = "https://api.github.com/repos/exampleuser/example-repo/contents/path/to/subdir"
HEADERS = {"Authorization": "token YOUR_GITHUB_TOKEN"}  # 如果需要授權

# 獲取檔案清單
response = requests.get(BASE_URL, headers=HEADERS)
files = response.json()

# 創建本地目錄
os.makedirs("path/to/subdir", exist_ok=True)

# 下載檔案
for file in files:
    if file['type'] == 'file':
        download_url = file['download_url']
        file_content = requests.get(download_url).content
        with open(os.path.join("path/to/subdir", file['name']), 'wb') as f:
            f.write(file_content)
        print(f"已下載: {file['name']}")

此腳本將從指定的子目錄下載所有檔案到本地對應目錄。

步驟三:執行腳本

保存並運行上述Python腳本,確保替換 YOUR_GITHUB_TOKEN 為您的GitHub訪問令牌(如果需要)。運行後,指定的子目錄檔案將被下載到本地目錄。

方法六:使用cURL或Wget下載單個檔案

步驟詳解

如果您只需要下載單個檔案或少量檔案,可以使用cURL或Wget工具。以下是具體操作步驟:

步驟一:獲取檔案的原始URL

在GitHub上打開您要下載的檔案,點擊右上角的 "Raw" 按鈕,複製URL。例如:

https://raw.githubusercontent.com/exampleuser/example-repo/main/path/to/subdir/file.txt

步驟二:使用cURL下載檔案

curl -O https://raw.githubusercontent.com/exampleuser/example-repo/main/path/to/subdir/file.txt

步驟三:使用Wget下載檔案

wget https://raw.githubusercontent.com/exampleuser/example-repo/main/path/to/subdir/file.txt

這些命令將下載指定的檔案到當前目錄。

方法七:使用GitHub Desktop應用程式下載子目錄

步驟詳解

GitHub Desktop是一款友好的GUI應用程式,允許用戶管理GitHub儲存庫。雖然GitHub Desktop主要用於克隆和管理整個儲存庫,但您也可以通過結合sparse checkout來僅下載特定子目錄。

步驟一:安裝GitHub Desktop

訪問GitHub Desktop官方網站,下載並安裝應用程式。

步驟二:克隆儲存庫

打開GitHub Desktop,點擊“克隆儲存庫”,輸入儲存庫URL,例如 https://github.com/exampleuser/example-repo,選擇本地保存路徑並進行克隆。

步驟三:設置sparse checkout

打開終端或命令提示符,導航到克隆的儲存庫目錄,並按照之前提到的Git Sparse Checkout步驟設置。

步驟四:更新和拉取檔案

在GitHub Desktop中,您可以通過點擊“拉取”按鈕來更新本地檔案,確保只下載您指定的子目錄。

方法八:使用PowerShell腳本自動下載子目錄

步驟詳解

對於Windows用戶,可以使用PowerShell腳本來自動化下載GitHub子目錄中的檔案。以下是一個簡單的示例腳本:

步驟一:撰寫PowerShell腳本

# 配置
$repoOwner = "exampleuser"
$repoName = "example-repo"
$branch = "main"
$subdir = "path/to/subdir"
$localPath = "C:\path\to\download"

# 獲取API URL
$apiUrl = "https://api.github.com/repos/$repoOwner/$repoName/contents/$subdir?ref=$branch"

# 發送請求
$response = Invoke-RestMethod -Uri $apiUrl -Headers @{ "User-Agent" = "PowerShell" }

# 創建本地目錄
New-Item -ItemType Directory -Path $localPath -Force

# 下載檔案
foreach ($file in $response) {
    if ($file.type -eq "file") {
        $downloadUrl = $file.download_url
        $filePath = Join-Path -Path $localPath -ChildPath $file.name
        Invoke-WebRequest -Uri $downloadUrl -OutFile $filePath
        Write-Output "已下載: $($file.name)"
    }
}

步驟二:執行腳本

將上述腳本保存為 Download-GitHubSubdir.ps1,然後在PowerShell中運行:

.\Download-GitHubSubdir.ps1

這將自動下載指定子目錄中的所有檔案到本地目錄。

方法九:使用Docker自動化下載子目錄

步驟詳解

對於需要在容器化環境中自動化下載GitHub子目錄的用戶,可以使用Docker來實現。以下是一個基於Docker的示例:

步驟一:撰寫Dockerfile

FROM alpine:latest

# 安裝必要工具
RUN apk add --no-cache git bash

# 設置工作目錄
WORKDIR /app

# 克隆儲存庫並設置sparse checkout
RUN git init && \
    git remote add -f origin https://github.com/exampleuser/example-repo.git && \
    git config core.sparseCheckout true && \
    echo "path/to/subdir" > .git/info/sparse-checkout && \
    git pull origin main

# 預設命令
CMD ["bash"]

步驟二:構建並運行Docker容器

# 構建Docker映像
docker build -t github-subdir-downloader .

# 運行容器
docker run --rm -v $(pwd)/downloaded:/app exampleuser/github-subdir-downloader

此命令將子目錄檔案下載到本地 downloaded 目錄。

方法十:使用Python的GitHub庫自動下載子目錄

步驟詳解

除了使用原生的requests庫,您還可以使用專門的Python庫(如PyGithub)來更方便地與GitHub API交互並下載子目錄檔案。以下是一個示例:

步驟一:安裝PyGithub庫

pip install PyGithub

步驟二:撰寫Python腳本

from github import Github
import os
import requests

# 配置
token = "YOUR_GITHUB_TOKEN"
repo_name = "exampleuser/example-repo"
subdir = "path/to/subdir"
local_path = "path/to/download"

# 初始化GitHub客戶端
g = Github(token)

# 獲取儲存庫
repo = g.get_repo(repo_name)

# 獲取子目錄內容
contents = repo.get_contents(subdir)

# 創建本地目錄
os.makedirs(local_path, exist_ok=True)

# 下載檔案
for content_file in contents:
    if content_file.type == "file":
        download_url = content_file.download_url
        response = requests.get(download_url)
        with open(os.path.join(local_path, content_file.name), 'wb') as f:
            f.write(response.content)
        print(f"已下載: {content_file.name}")

步驟三:運行腳本

保存並運行上述Python腳本,確保替換 YOUR_GITHUB_TOKEN 為您的GitHub訪問令牌。腳本將自動下載指定子目錄中的所有檔案到本地。

方法十一:使用Jupyter Notebook進行下載

步驟詳解

如果您經常在Jupyter Notebook中工作,可以編寫Notebook代碼塊來自動化下載GitHub子目錄檔案。以下是一個示例代碼:

步驟一:安裝必要的庫

!pip install requests

步驟二:撰寫下載代碼

import requests
import os

# 配置
repo_owner = "exampleuser"
repo_name = "example-repo"
branch = "main"
subdir = "path/to/subdir"
local_dir = "downloaded_subdir"

# GitHub API URL
api_url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/contents/{subdir}?ref={branch}"

# 發送請求
response = requests.get(api_url)
files = response.json()

# 創建本地目錄
os.makedirs(local_dir, exist_ok=True)

# 下載檔案
for file in files:
    if file['type'] == 'file':
        file_url = file['download_url']
        file_response = requests.get(file_url)
        with open(os.path.join(local_dir, file['name']), 'wb') as f:
            f.write(file_response.content)
        print(f"已下載: {file['name']}")

步驟三:運行Notebook

在Jupyter Notebook中運行上述代碼塊,即可將指定子目錄中的所有檔案下載到本地目錄。

方法十二:使用Power Query在Excel中抓取子目錄檔案

步驟詳解

如果您希望在Excel中直接處理GitHub子目錄的檔案,Power Query是一個強大的工具。以下是具體操作步驟:

步驟一:打開Excel並啟用Power Query

在Excel中,導航至“資料”選項卡,選擇“從Web”以啟動Power Query。

步驟二:輸入API URL

在彈出的對話框中,輸入GitHub API URL,例如:

https://api.github.com/repos/exampleuser/example-repo/contents/path/to/subdir?ref=main

步驟三:轉換和載入數據

使用Power Query編輯器,將JSON響應轉換為表格格式,然後載入到Excel工作表中。接下來,您可以使用Excel的功能來下載並管理檔案。

方法十三:利用R語言自動化下載子目錄檔案

步驟詳解

對於R語言用戶,可以編寫腳本來使用GitHub API自動下載子目錄檔案。以下是一個示例:

步驟一:安裝必要的套件

install.packages("httr")
install.packages("jsonlite")

步驟二:撰寫R腳本

library(httr)
library(jsonlite)

# 配置
repo_owner <- "exampleuser"
repo_name <- "example-repo"
branch <- "main"
subdir <- "path/to/subdir"
local_dir <- "downloaded_subdir"

# GitHub API URL
api_url <- paste0("https://api.github.com/repos/", repo_owner, "/", repo_name, "/contents/", subdir, "?ref=", branch)

# 發送請求
response <- GET(api_url)
contents <- fromJSON(content(response, "text"))

# 創建本地目錄
if(!dir.exists(local_dir)){
  dir.create(local_dir, recursive = TRUE)
}

# 下載檔案
for(file in contents){
  if(file$type == "file"){
    download_url <- file$download_url
    file_path <- file.path(local_dir, file$name)
    download.file(download_url, destfile = file_path, mode = "wb")
    print(paste("已下載:", file$name))
  }
}

步驟三:運行腳本

在R環境中運行上述腳本,指定子目錄中的所有檔案將被下載到本地目錄。

表格比較各方法

方法 優點 缺點 適用場景
SVN工具 簡單、快速下載特定子目錄 需要安裝SVN,僅支持部分情況 快速下載,維持與原儲存庫的一致性
Git Sparse Checkout 靈活,僅下載所需部分 步驟較多,需具備Git基礎 需要與Git儲存庫整合使用
GitZip插件 使用方便,無需命令行知識 依賴瀏覽器插件,功能有限 適合非技術用戶,快速下載
第三方線上工具 無需安裝任何工具,快速操作 依賴第三方服務,可能有隱私風險 臨時下載需求,不頻繁使用
GitHub API 高度自動化,適合批量處理 需要編程知識,複雜度較高 需要整合到自動化流程或應用中
GitHub Desktop 圖形界面友好,適合不熟悉命令行的用戶 需要學習如何與sparse checkout結合使用 適合使用GUI工具管理Git儲存庫的用戶
PowerShell腳本 適合Windows用戶,能夠自動化下載流程 需要編寫並理解PowerShell腳本 需要在Windows環境中批量下載檔案的用戶
Docker自動化 適合容器化環境,能夠重複使用和部署 需要Docker知識,設置較為複雜 需要在Docker容器中自動化部署下載流程的用戶
Python的GitHub庫 靈活,能夠集成到更複雜的應用中 需要編程知識和庫的熟悉度 開發者需要自動化下載並進行後續處理
Jupyter Notebook 適合數據分析和交互式操作 需要運行Jupyter環境 數據科學家和分析師需要在Notebook中處理檔案
R語言腳本 適合R用戶,自動化下載流程 需要R編程知識 需要在R環境中進行數據處理和自動化的用戶

結論

根據您的技術水平和具體需求,可以選擇最適合的方法來抓取GitHub子目錄中的所有檔案。如果您需要快速且簡單的下載,使用SVN工具或GitZip插件是良好的選擇;如果您需要更高的靈活性和自動化,則可以考慮使用Git sparse checkout、GitHub API或編寫腳本。此外,根據您使用的平台和工具偏好,Docker、PowerShell或R語言腳本也提供了強大的自動化能力。無論您選擇哪種方法,都應確保遵守GitHub的使用條款,並在處理私人儲存庫時妥善管理訪問權限和憑證。

參考資源


Last updated January 23, 2025
Search Again