Копирование файлов с четным номером в названии - bash - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу скопировать все файлы из / usr / lib, который заканчивается на .X.0.0, где X - четное число. Есть ли лучший способ, чем следующий, чтобы выбрать все файлы?

ls /usr/lib | grep "[02468].0.0$"

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

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Вы можете использовать расширенные регулярные выражения grep для совпадения только с четными числами:

ls -1q /usr/lib | grep -E "\.[0-9]*[02468].0.0$"

Однако, как предположил Том, есть лучшие варианты, чем парсинг вывода ls. Как правило, безопаснее и быстрее использовать расширение glob, и его удобнее обслуживать, просто помещая все в скрипт python .

0 голосов
/ 24 апреля 2018

Просто используйте расширение glob для сопоставления файлов:

cp /usr/lib/*.*[02468].0.0 /path/to/destination

Оболочка разворачивает этот шаблон в список файлов перед передачей их в качестве аргументов cp.

Поскольку выпомеченный Bash, вы можете сделать соответствие более строгим, используя расширенный глоб:

shopt -s extglob failglob
cp /usr/lib/*.*([0-9])[02468].0.0 /path/to/destination

Это соответствует 0 или более другим цифрам, за которыми следует четная цифра, и вообще не запускает команду, если нет файловматч.

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