Использование find с двумя наборами переменных

Я хочу, чтобы иметь возможность запускать команду find в моем сценарии bash, который найдет файлы на основе двух отдельных переменных. Я получил это далеко, но я не уверен, как добиться конечного результата
find . -user $userid -name $filename

 cat $uidscript 10017:title 10001:options.php 10005:dump.php(235) 

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

 userid=$(cat $uidscript|cut -c1 -d':') filename=$(cat $uidscript|cut -c2 -d':')` 

Отсюда я не уверен, как организовать команду find в цикле for. Я бы подумал, что это будет что-то вроде этого ..

 for i in $userid, $filename; do find . -user $userid -name $filename; done 

Может ли кто-нибудь дать мне толчок в правильном направлении?

3 Solutions collect form web for “Использование find с двумя наборами переменных”

Используйте цикл while-read для обработки строк файла

 while IFS=: read userid filename do find . -user "$userid" -name "$filename" done < "$uidscript" 

Вы можете сделать:

 IFS=: # split on : set -f # disable glob part of the split+glob operator echo find . $( awk -F: ' { printf "%s", sep "(:-user:" $1 ":-name:" $2 ":):" sep = "-o:" }' < "$uidfile") 

(удалите echo если это правильная команда, которую вы хотите запустить).

В то время как другие варианты в порядке, я хотел бы исправить некоторые ошибки в вашем подходе:

userid=$(cat $uidscript|cut -c1 -d':') :

  • -c получает символы, вам нужны поля . Используйте cut -f1 -d:
  • Бесполезное использование кошки: просто выполните: cut -f1 -d: <"$uidscript" .
  • Храните результат в массиве, чтобы вы могли перебирать его и другой массив:

     IFS=$'\n' # split on newline set -f # disable the glob part of the split+glob operator userid=($(cut -f1 -d: <"$uidscript")) 
  • То же самое для имен файлов.

Затем вы можете перебирать индексы любого из массивов:

 for i in "${!userid[@]}" do find . -user "${userid[i]}" -name "${filename[i]}"; done 
  • В сценарии bash, что отличается между объявлением и нормальной переменной?
  • как получить или отразить имя вызываемой функции bash?
  • Может ли awk использовать идентификаторы полей также для строк оболочки (переменных)?
  • Переменные баша в команде
  • Область переменных в while-read-loop на Solaris
  • перечислить файлы и сохранить их в переменных
  • Проверьте, содержит ли строка строку подстроки
  • Как сохранить статус последнего выхода после теста
  • Что означает «$ {x %% *}» в sh?
  • Как передать переменную в sftp?
  • Использование sed в сценарии оболочки с многострочными переменными
  • Linux и Unix - лучшая ОС в мире.