Как вычесть список папок и файлов из другого? - PullRequest
0 голосов
/ 04 января 2019

У меня есть git-репо, как показано ниже:

[root@localhost www]# tree
.
├── admin.php
├── api
    ├── index.htm
    └── remote
        └── mod
            ├── index.htm
            ├── mod_cron.php
            └── mod_index.php


3 directories, 5 files

Легко получить список папок и файлов, отслеживаемых git.

[root@localhost www]# git ls-files >a.txt
[root@localhost www]# cat a.txt
.gitattributes
.gitignore
admin.php
api/index.htm
api/remote/mod/index.htm
api/remote/mod/mod_cron.php
api/remote/mod/mod_index.php

Но в рабочей директории есть некоторые папки и файлы, которые не отслеживаются git. Вся рабочая директория, как показано ниже:

    [root@localhost www]# tree
    .
    ├── admin.php
    ├── api
    │   ├── index.htm
    │   └── remote
    │       ├── index.htm
    │       ├── index.php
    │       └── mod
    │           ├── index.htm
    │           ├── mod_cron.php
    │           └── mod_index.php
    ├── archiver
       └── index.php

4 directories, 8 files

Как получить список папок и файлов, не отслеживаемых git, как показано ниже :

archiver/
archiver/index.php
api/remote/index.htm
api/remote/index.php

Я хочу использовать этот список в rsync -av --files-from=/path/to/not_tracked_files_lsit.
Заранее спасибо!

1 Ответ

0 голосов
/ 04 января 2019

В основном копирование из комментариев выше ...

A find даст вам полный список имеющихся файлов.

find | grep -v '[.]git/' | grep -vf a.txt

должен устранить дерьмо из самого репо и всех отслеживаемых файлов.

Другой вариант, возможно, лучше:

git status -s | sed -n '/^[^?]/d; s/^?? //; p;'

Это должно сделать то же самое, но, надеюсь, немного чище и более точно, с меньшим количеством процессов в конвейере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...