Скажем, у меня есть список строк. Я хочу найти, что файлы с именами файлов, запускающимися с них, представляют в виде строки.
Пример,
Строки: filename.could.start.with.this.restoffilename a.file.could.have.this.at.beginning.restoffilename
Этот список строк может быть произвольным числом (очевидно, намного больше, чем всего два как выше).
Я хочу использовать сценарий удара для этот и только использовать то, что я рассматриваю основные заявления Linux (ls, grep, sed, найдите и т.д.), таким образом, никакой Python, жемчуг, рубин или другие такие языки.
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
...
Кроме того, это не будет вести себя хорошо, если дали пустой список префиксов имени файла; если это - возможность, проверьте на это условие сначала.
Просто продолжайте добавлять find
предикаты к массиву, пока у Вас нет своей команды.