循环 bash 以读取存储库(文件夹)

Loop in bash for reading repositories(folders)

我制作了这个脚本:

  1. 将所有存储库从 Bitbucket 克隆到文件夹“临时项目”。要克隆存储库,脚本使用我的“repolinks.csv”,这通常是名称所说的,指向存储库的链接保存为文本文件:)
  2. 克隆每个 repo 后,脚本在“temporaryprojects”中的每个文件夹(repo)中搜索所有 .ttf 文件并保存结果(这是每个 ttf 文件的路径) 作为 TTF 项目路径
  3. OTFINFO 部分正在读取 .ttf 文件的路径 (TTF-Projects-Paths) 并提供有关这些 ttf 文件的指定信息(家族、子家族、作者等)并将其保存为“TTF-Projects-INFO”
#!/bin/bash
cd /Users/krzysztofpaszta/temporaryprojects
for repo in $(cat /users/krzysztofpaszta/repolinks.csv); do
git clone "$repo"
echo Repo cloned to /users/krzysztofpaszta/temporaryprojects
done
#tablica z nazwa repo (repo_links na przykład) + repo pętla
echo Pobieranie ścieżek wszystkich plików TTF na urządzeniu z projektow Boombit
find "/users/krzysztofpaszta/temporaryprojects/" -name "*.ttf" > /Users/krzysztofpaszta/TTF-Projects-PATHS.csv
echo Sciezki plikow pobrane
while read in; do
    otfinfo --info filename="${fullfile##*/}" >> /users/krzysztofpaszta/TTF-Projects-INFO.csv "$in"
done < /users/krzysztofpaszta/TTF-Projects-PATHS.csv
echo dane plikow pobrane
rm -vrf /Users/krzysztofpaszta/temporaryprojects/*
echo Repo deleted

一切都很好,但现在我正在努力修改这个脚本。如您所见,现在所有的存储库都已下载,然后有关存储库的所有信息都保存在一个名为 TTF-Project-INFO 的文件中。我需要它做的是单独搜索每个回购并将结果保存为 $repo.csv(一个回购的名称为 csv),并不断地保存到“repolinks.csv”中的最后一个回购 我这样修改了脚本:

#!/bin/bash
cd /Users/krzysztofpaszta/temporaryprojects
for repo in $(cat /users/krzysztofpaszta/repolinks.csv); do
git clone "$repo"
find "/users/krzysztofpaszta/temporaryprojects/$repo" -name "*.ttf" > /Users/krzysztofpaszta/$repo.csv
echo Repo cloned to /users/krzysztofpaszta/temporaryprojects
while read in; do
    otfinfo --info filename="${fullfile##*/}" >> /users/krzysztofpaszta/TTF-Projects-INFO.csv "$in"
done < /users/krzysztofpaszta/TTF-Projects-PATHS.csv

但不幸的是,它实际上也在做同样的事情。将每个 repo 保存到“临时项目”,然后 搜索每个 .ttf 文件路径,然后搜索信息并将这些信息保存在一个文件中。我认为这只是 bash 中非常简单的循环,但我不知道如何正确执行。有人可以给我一些提示吗?我试图修改脚本,但到目前为止没有成功。

CSV 样本: TTF-项目-Paths.csv:

/users/krzysztofpaszta/temporaryprojects/project1/Fonts/SwallowFallsMixAllCyryl.ttf
/users/krzysztofpaszta/temporaryprojects/project2/Fonts/KOMIKAZE.ttf
/users/krzysztofpaszta/temporaryprojects/project2/Graphics/Fonts/Arial Unicode.ttf
/users/krzysztofpaszta/temporaryprojects/project3/fonts/SwallowFallsMixAll.ttf

TTF-项目-INFO.csv:

/users/krzysztofpaszta/temporaryprojects/project1/Fonts/LiberationSans.ttf:Family:              Liberation Sans
/users/krzysztofpaszta/temporaryprojects/project1/Fonts/LiberationSans.ttf:Subfamily:           Regular
/users/krzysztofpaszta/temporaryprojects/project1/Fonts/LiberationSans.ttf:Full name:           Liberation Sans
/users/krzysztofpaszta/temporaryprojects/project1/Fonts/LiberationSans.ttf:PostScript name:     LiberationSans
etc... project2, project3 with the same info about fonts.

repolinks.csv:

https://bitbucket.org/organisation/project1-settings https://bitbucket.org/organisation/crave-man https://bitbucket.org/organisation/adverts https://bitbucket.org/organisation/pipeline https://bitbucket.org/organisation/data https://bitbucket.org/organisation/async https://bitbucket.org/organisation/audio
etc..

如果您想对所有回购使用 $repo.csv 而不是同一文件,请更改附加重定向中的输出文件:

# old
>> /users/krzysztofpaszta/TTF-Projects-INFO.csv
# new
>> /users/krzysztofpaszta/"$repo".csv

目录名称不是全部URL,只是最后一部分,您可以在bash中使用参数扩展将其提取出来:

dir=${repo##*/}  # Remove everything up to the last slash.

适当的缩进有助于理解流程:

#!/bin/bash
cd /Users/krzysztofpaszta/temporaryprojects
for repo in $(cat /users/krzysztofpaszta/repolinks.csv); do
    git clone "$repo"
    dir=${repo##*/}
    echo Repo cloned to /users/krzysztofpaszta/temporaryprojects

    find /users/krzysztofpaszta/temporaryprojects/"$dir" -name "*.ttf" > /users/krzysztofpaszta/TTF-list-"$dir".csv
    while read in ; do
        otfinfo --info filename="${fullfile##*/}" "$in" >> /users/krzysztofpaszta/"$dir".csv
    done < /users/krzysztofpaszta/TTF-list-"$dir".csv
done

我不确定 $fullfile 是什么,所以我保持原样。