Github 操作检查文件是否已存在

问题描述 投票:0回答:4

我有以下 git 操作,它允许我下载图像。

我必须确保文件是否已经存在才能跳过“提交文件”和“推送更改”

如何检查文件是否已经存在,如果已经存在则不执行任何操作。

on: 
  workflow_dispatch:
  
name: Scrape File
jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        name: Check out current commit
     
      - name: Url
        run: |
         URL=$(node ./action.js)
         echo $URL
         echo "URL=$URL" >> $GITHUB_ENV
      
      - uses: suisei-cn/actions-download-file@v1
        id: downloadfile
        name: Download the file
        with:
          url: ${{ env.URL }}
          target: assets/
      - run: ls -l 'assets/'
          
      - name: Commit files
        run: |
         git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
         git config --local user.name "github-actions[bot]"
         git add .
         git commit -m "Add changes" -a
         
      - name: Push changes
        uses: ad-m/github-push-action@master
        with:
         github_token: ${{ secrets.GITHUB_TOKEN }}
         branch: ${{ github.ref }}
file github yaml action github-actions
4个回答
8
投票

这里有一些选项 - 您可以直接使用 bash 并执行如下操作:

if test -f "$FILE"; then
    #file exists
fi

或使用现有操作之一,如下所示:

- name: Check file existence
  id: check_files
  uses: andstor/file-existence-action@v1
  with:
    files: "assets/${{ env.URL }}"

- name: File exists
  if: steps.check_files.outputs.files_exists == 'true'
  run: echo "It exists !"

1
投票

警告:Linux(也许还有 MacOS)是唯一的解决方案!

我早些时候处理过一个非常类似的情况,并开发了一种方法,不仅可以检查添加的文件,而且如果您想检查修改或删除的文件或目录也很有用。


警告:

此解决方案仅在 git 存储库中添加/修改/删除文件时才有效。


简介:

命令

git status --short
将返回未跟踪、已删除和已修改文件的列表。例如:-

 D deleted_foo
 M modified_foo
?? untracked_dir_foo/
?? untracked_file_foo
A  tracked_n_added_foo

请注意,我们运行与

git status -s
相同的命令。

理解 `git status -s` 输出:

当您阅读输出时,您将看到以下形式的一些行:

** filename
** dirname/

请注意,这里

**
代表该行的第一个单词(例如
D
??
等)。

以下是各行中所有

**
的摘要:

**
意义
 D
文件/目录已被删除。
 M
文件/目录已被修改。
??
文件/目录已添加,但未使用
git add [FILENAME]
进行跟踪。
A 
文件/目录已添加并使用
git add [FILENAME]
进行跟踪。

注意:注意空格! 例如,在以下解决方案中使用

M
代替
 M
将无法按预期工作!


解决方案:

解决方案的外壳部分:

我们可以通过

grep
的输出来检查文件/目录是否被添加/修改/删除。
解决方案的外壳部分如下所示:

git status -s

注意:

从上表中获取所需的 if git status -s | grep -x "** [FILENAME]"; then # Do whatever you wanna on match else # Do whatever you wanna on no-match fi 并将

**
替换为文件名。
例如,要检查名为 

[FILENAME]

的文件是否被修改,请使用:

foo

解释:

我们使用git status -s | grep -x " M foo" 来获取输出并将输出通过管道传输到

git status -s
。我们还使用命令行选项
grep
-x
来匹配整行。
解决方案的工作流程部分:

一个非常简单的解决方案将如下所示:

grep



1
投票


0
投票
if [ -d "directory"]; then echo dir exists && echo ok; else echo no dir; fi

功能来实现此目的。 来自文档:


返回与路径模式匹配的文件集的单个哈希值。您可以提供单个路径模式或多个以逗号分隔的路径模式。 (...) 如果路径模式与任何文件都不匹配,则返回空字符串。

有关详细信息,请参阅文档:

docs.github.com

所以你可以这样做:

hashFiles

但这不适用于检查目录,因为 
- name: Commit files if: ${{ hashFiles('assets/') != '' }} run: | git config ...

将为空目录返回空字符串。

该解决方案的版权归 Peter Bengtsson 的博客:

peterbe.com/plog

© www.soinside.com 2019 - 2024. All rights reserved.