Нахождение файлов в Linux на основе regex, с несколькими альтернативами

Скажем, у меня есть список строк. Я хочу найти, что файлы с именами файлов, запускающимися с них, представляют в виде строки.

Пример,

Строки: filename.could.start.with.this.restoffilename a.file.could.have.this.at.beginning.restoffilename

Этот список строк может быть произвольным числом (очевидно, намного больше, чем всего два как выше).

Я хочу использовать сценарий удара для этот и только использовать то, что я рассматриваю основные заявления Linux (ls, grep, sed, найдите и т.д.), таким образом, никакой Python, жемчуг, рубин или другие такие языки.

1
задан 09.05.2011, 01:40

0 ответов

prefixes=("filename.could.start.with.this" "a.file.could.have.this.at.beginning")

# Turn the prefix array into a find expression (in array form)
matchlist=()
for prefix in "${prefixes[@]}"; do
    matchlist+=("-o" "-name" "$prefix*")
done
matchlist=("${matchlist[@]:1}") # remove the extra "-o" from the beginning

# Search the current directory for plain files with names starting with one of the prefixes
find -x . "(" "${matchlist[@]}" ")" -type f

Если бы Ваш список префиксов имени файла не был в форме массива, то необходимо было бы изменить это соответственно, например.

prefixes="filename.could.start.with.this a.file.could.have.this.at.beginning"

...
for prefix in $prefixes; do
...

Кроме того, это не будет вести себя хорошо, если дали пустой список префиксов имени файла; если это - возможность, проверьте на это условие сначала.

2
ответ дан 12.12.2019, 12:53

Bash запись FAQ № 50: "Я пытаюсь поместить команду в переменную, но сложные случаи всегда перестали работать!"

Просто продолжайте добавлять find предикаты к массиву, пока у Вас нет своей команды.

0
ответ дан 12.12.2019, 12:53

Теги

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