найти файлы с шаблоном сопоставления базового имени при возвращении полного пути

Oldschool, просто переведите свое предложение в стандартные команды:

for file in *; do
    if head -n 1 "${file}" | grep -q 'PATTERN'; then
        cat "${file}"
    fi
done

Для изучения bash это хорошее начало. Если вам просто нужно быстрое решение, попробуйте ответы на sed, awk или perl. Оба хороши, но это собственные языки, которые вам нужно (и, вероятно, вы хотите) выучить.

Это довольно простой пример, поэтому, если вы хотите узнать больше, вы также можете попробовать то же самое на ruby, php, js (например, в nodejs) или на любом другом языке, который разрешает доступ к файлам. Даже C / C ++ или Java должны легко справляться с небольшой задачей.

0
12.03.2018, 18:01
3 ответа

Вы можете просто указать findисключить файлы, начинающиеся с pure_, а также выполнить grepс выражением -regex:

find./path -mindepth 1 -maxdepth 2 -type f ! -name 'pure_*' -regex '.*\.[0-9][0-9][0-9].txt$'

С копиями в моделируемом каталоге из вашего примера я получаю:

./path/1/file1.001.txt
./path/1/file2.001.txt
./path/2/file3.002.txt
1
28.01.2020, 02:18
find -type f | egrep "[0-9]{3}\.txt$" | grep -v pure_

Программа findищет файлы, начинающиеся в вашем текущем каталоге.

egrepприменяет расширенные регулярные выражения, фильтруя три цифры, к которым добавляется ".txt" (точки должны быть экранированы, иначе "Atxt" тоже будет соответствовать )в конце строки.

grepотфильтровывает(-v)строк со строкой "чистый _" (Я не уверен, что место "чистого _" важно ).

0
28.01.2020, 02:18

findбез сопоставления с регулярным выражением:

find /path -type f ! -name 'pure_*' -name '*[0-9][0-9][0-9].txt'

Это найдет любой обычный файл в каталоге /pathили под ним, имя которого не начинается с pure_, а заканчивается тремя цифрами и .txt.

3
28.01.2020, 02:18

Теги

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