использование ls с grep для архивации выбора файлов - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь сделать мой рабочий процесс более эффективным, используя bash.

У меня есть эти файлы 20201.csv 20202.csv 20203.csv 20191.csv 20192.csv

с

ls | grep '2020*' 

Я извлекаю файлы, которые начинаются с 2020. Я борюсь с синтаксисом, как получить файлы в этом меньшем списке, чтобы сжать.

Я пытался:

ls | grep '2020*' | zip archive.zip
ls | zip archive.zip grep '2020*'

Я пытался писать в переменную, и я прочитал Man / --help zip и grep. Я посетил около 20 различных веб-сайтов и стековых страниц.

https://unix.stackexchange.com/questions/231239/how-to-redirect-output-of-a-program-to-a-zip-file https://unix.stackexchange.com/questions/231239/how-to-redirect-output-of-a-program-to-a-zip-file https://www.geeksforgeeks.org/zip-command-in-linux-with-examples/ и многие другие.

Может кто-нибудь помочь мне разобраться в коде? Где я пропускаю или где я делаю неправильное предположение?

Большое спасибо.

1 Ответ

1 голос
/ 13 февраля 2020

Не анализируйте ls

zip archive.zip 2020*

- это все, что вам нужно.

Пока bash анализирует эту строку для выполнения, она будет расширяться шаблон файла до запускает zip.

Важно отметить разницу между регулярными выражениями:

  • регулярное выражение 2020* соответствует в любом месте строки «202», за которым следует ноль или более «0»
    • строка «202» соответствует регулярному выражению 2020*
    • Строка "120201" соответствует регулярному выражению 2020*
  • шаблон глобуса 2020* соответствует, начиная с начала, "2020", за которым следует ноль или более из любой символ
    • файл "202" не соответствует шаблону глобуса 2020*
    • файл "120201" не в соответствии с шаблоном шара 2020*
...