1

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

Пример,

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

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

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

2 ответа2

2
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
...

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

0

BASH FAQ # 50: «Я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу!"

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .