Трубка (|) соединяет стандартный поток вывода процесса со стандартным потоком ввода другого процесса. Вы не можете использовать это, чтобы передать список имен файлов в г.м. напрямую, потому что г.м. не читает имена файлов со своего стандартного ввода.
Ты мог использовать xargs программа для чтения списка это стандартный ввод и «объединить» имена файлов для г.м.:
лс-А | grep abcdef | xargs пм
но не, с этим подходом связаны всевозможные проблемы, в частности, grep обрабатывает ввод построчно, а xargs по умолчанию разбивает входные данные на пробелы. Вы можете сделать это лучше, используя что-то вроде
shopt -s dotglob # имитировать ls -A "почти все" скрытые файлы
printf '%s\0' * | grep -z abcdef | xargs -0 пм
который использует нулевой символ ASCII для однозначного разделения имен файлов. Обычно предпочтительным подходом является использование найти команда:
найти . -maxdepth 1 -name '*abcdef*' # -delete
(я оставил -удалять прокомментировал на данный момент - убедитесь, что это найтипроверяя нужные файлы, прежде чем раскомментировать их, так как нет операции «отменить»).
Обратите внимание, что найти рекурсивно в подкаталоги по умолчанию - если вы хотите эквивалент лс-р затем удалите -максимальная глубина 1. Можете добавить -тип ф для поиска и удаления только файлов (без каталогов).
Также обратите внимание, что найти -имя использует шаблоны оболочки оболочки, а не регулярные выражения, используемые grep (у него также есть -regex match предикат, но здесь это не требуется).
Смотрите также Почему нет разобрать лс (и что делать вместо этого)?