Чтение всех файлов по определенному пути в Bash [duplicate]

Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:

Вы пытаетесь использовать ссылочную переменную, значение которой Nothing / null. Если для ссылочной переменной значение Nothing / null, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.

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

23
задан Ross Duncan 14 January 2011 в 15:16
поделиться

2 ответа

Удаленный ответ был на правильном пути. Небольшая модификация вашей попытки:

shopt -s extglob
MYDIR="./images"
OTHERDIR="./images/junk"  
SUFFIXES='@(pdf|eps|jpg|svg)'
mv "$MYDIR/"*.$SUFFIXES "$OTHERDIR/"

Расширение скобки выполняется до расширения переменной, но расширение переменной выполняется до расширения имени пути. Таким образом, фигурные скобки по-прежнему являются фигурными скобками, когда переменная расширяется в вашем оригинале, но когда переменная вместо этого содержит элементы pathname, они уже были расширены, когда расширение пути будет выполнено.

23
ответ дан Dennis Williamson 26 August 2018 в 11:21
поделиться

Вам нужно будет оценить эту строку, чтобы она работала так:

MYDIR="./images"
OTHERDIR="./images/junk"  
SUFFIXES='{pdf,eps,jpg,svg}'
eval "mv \"$MYDIR\"/*.$SUFFIXES \"$OTHERDIR/\""

Теперь у этого есть проблемы, в частности, если вы не доверяете $SUFFIXES, он может содержать инъекционную атаку, но для этого простого случая это должно быть хорошо.

Если вы открыты для других решений, вы можете поэкспериментировать с find и xargs.

6
ответ дан falstro 26 August 2018 в 11:21
поделиться
Другие вопросы по тегам:

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