как использовать команду find поверх вывода ls

Вы очень близки к рабочему решению. Вот один из способов сделать это (, отформатированный для удобочитаемости):

awk '{
    match($0,/F2/); 
    a=substr($0, RSTART +2, RLENGTH +3); 
    match($0,/F6/); 
    b=substr($0, RSTART +2,RLENGTH +4);
    print a" "b
}'

В этом случае я беру две ваши substr()функции и назначаю их переменным, вместо того, чтобы печатать их напрямую, а затем просто настраиваю их на одновременную печать в конце. Распечатывая их в одном вызове печати, awkдобавляет только один символ новой строки в конце строки, а не после каждой части строки, что разделяло ваш результат на две строки.

bash:~$ echo F1B308F2B3094F3B310F4B317CF5B312F6BC313DF7B315 | awk '{match($0,/F2/); a=substr($0, RSTART +2, RLENGTH +3); match($0,/F6/); b=substr($0, RSTART +2,RLENGTH +4); print a" "b}'
B3094 BC313D
0
02.08.2020, 21:34
3 ответа

Вам не нужно направлять вывод ls в grep. В Grep для этого есть встроенная опция.

grep -rle 'EXEC_EC'

-l будет только список файлов -r рекурсивные средства будут проходить через все файлы, начиная с вашего текущего пути -e после этого grep ожидает, что ваш шаблон будет строкой

-2
18.03.2021, 23:15

Нет смысла использовать grepдля фильтрации, если вы все равно используете find.

find. -mindepth 1 -maxdepth 1 -name '*EXEC_EC*' -mtime +7

По умолчанию findобходит все поддерево (, т. е. содержимое всех подкаталогов ). -mindepth 1 -maxdepth 1предотвращает это, так как пример работает только с содержимым одного каталога. -mindepth 1заставляет findигнорировать аргументы каталога (в данном случае ., не обязательно, но в общем случае ). -maxdepth 1предотвращает спуск в подкаталоги.

2
18.03.2021, 23:15

Это то, что вы ищете?

$ find. -name '*EXEC_EC*' -mtime +7 -print

. = Представляет ваш текущий каталог, вы можете заменить его путем к каталогу.

-mtime -Представляет время модификации файла и используется для поиска файлов старше 7 дней.

0
18.03.2021, 23:15

Теги

Похожие вопросы