Сопоставление нескольких шаблонов с помощью ls

Сопоставление нескольких шаблонов с помощью ls

Я хотел бы получить список журналов сбоев в текущем каталоге для использования во внешнем скрипте, журналы определяются шаблоном FAIL в имени файла, поэтому я использовал FAIL* для передачи файлов скрипта для открытия и обработки. Однако для каждого файла FAIL есть два типа: сжатый файл и несжатый. Я просто хочу открыть несжатый файл.

Можно ли выполнить цепочку find FAIL*, но не если существует *.gz/bz2/whatever?

решение1

Вы можете проверить наличие регулярного выражения для этих расширений:

for file in *FAIL*; do [[ ! $file =~ .(bz2|gz) ]] && printf "%s\n" "$file"; done

Вставьте обязательное предупреждение оне разбираетсяls...

решение2

Если вы используете findкоманду, вы можете пропустить файлы, которые заканчиваются расширением, .gzнапример:

$ ls -l
total 0
-rw-rw-r--. 1 saml saml 0 Oct 15 22:42 FAIL
-rw-rw-r--. 1 saml saml 0 Oct 15 22:42 FAIL.gz

$ find . -name "*FAIL*" ! -name "*.gz"
./FAIL

Вы также можете фильтровать lsвывод следующим образом:

$ ls *FAIL* | grep -v '.gz'
FAIL

Однако обычно рекомендуется не анализировать lsвывод, поскольку он не структурирован настолько, чтобы это было удобно.

Связанный контент