Назначать файлы в списке при использовании команды bash find - PullRequest
0 голосов
/ 07 сентября 2018

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

Я пробовал это:

#!/bin/bash
PATH=/Users/mike/test

LIST='find $PATH -name *.txt'
for newfiles in @LIST; do
    #checksize
    echo $newfiles 
done

Мой вывод: @LIST

Я пытаюсь сделать то же самое, что и команда glob в perl в bash.

var = glob "PATH/*.txt";

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Если вы используете bash 4 или более позднюю версию, не используйте find вообще.

shopt -s globstar nullglob
list=( "$path"/**/*.txt )
for newfile in "${list[@]}"; do
    echo "$newfile"
done
0 голосов
/ 07 сентября 2018

LIST = $ (найти $ PATH -name * .txt) для новых файлов в $ LIST; делать

Помните, что у вас могут возникнуть проблемы, если в именах файлов есть пробелы.

0 голосов
/ 07 сентября 2018

Используйте $(command) для выполнения command и замены его вывода вместо этой конструкции.

list=$(find "$PATH" -name '*.txt')

И чтобы получить доступ к переменной, поставьте $ перед именем, а не @ (ваш опыт показывает perl).

for newfiles in $list; do
    echo "$newfiles"
done

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

find "$PATH" -name '*.txt' | while read -r newfiles; do
    echo "$newfiles"
done

Также обратите внимание, что вы должны заключать в кавычки любые переменные, которые вы не хотите разбивать на несколько слов, если они содержат пробелы.

И избегайте использования имен переменных в верхнем регистре. Это обычно зарезервировано для переменных среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...