перечислить определенные папки, содержащие пробелы в скрипте Cygwin / bash - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь создать сценарий bash на Cygwin и Windows Server 2008 R2, который ищет некоторые папки и перемещает их.

Кажется, проблема связана с именами папок, поскольку они содержать несколько пробелов между ними.

Все эти папки названы так: SOMENAME - RAF , где первая часть имени, SOMENAME , в этом случае изменяется в соответствии с содержанием документа, в то время как вторая часть - RAF является неизменяемой.

Я придумал следующий пример, но, к сожалению, не дает результата:

#!/bin/bash

rootdir="E:\cork scew"
workdir="E:\cork scew\temp"
outdir="E:\cork scew\completed"

if [ -d "$(cygpath -u "${rootdir}")/*\ -\ RAF" ];
  then
echo found em
  else
exit 0
fi

I также пытались без cygpath , таким образом, используя стандартный путь unix, но, по сути, не имели значения. Папки в этом формате * \ - \ RAF , похоже, не найдены.

По иронии судьбы, выполнение ls, как вы обычно делаете на bash, работает

blahba@locked /cygdrive/e/scum
$ ls /cygdrive/e/cork\ screw/*\ -\ RAF

/cygdrive/e/cork screw/WS0001 - RAF:
TEST1

/cygdrive/e/cork screw/WS0002 - RAF:
TEST1

/cygdrive/e/cork screw/WS0003 - RAF:
TEST1

/cygdrive/e/cork screw/WS0004 - RAF:
TEST1

Bash версия выглядит как 4.3.42 (4) -релиз (x86_64-unknown-cygwin) . Кто-нибудь понял, что я делаю не так?

Спасибо

1 Ответ

1 голос
/ 04 февраля 2020

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

Эти шаблоны должны работать:

dirs="$(cygpath -u "${rootdir}")/"*" - RAF"

или

dirs="$(cygpath -u "${rootdir}")/"*\ -\ RAF

И чтобы проверить, есть ли совпадения, вы можете использовать что-то вроде

if [ -n "${dirs}" ]; then
    for dir in ${dirs}; do
        echo "Found ${dir}"
    done
else
    echo "No dir found"
fi
...