Проблема Список файлов в bash с пробелами в пути к каталогу - PullRequest
5 голосов
/ 01 августа 2011

При вводе каталога в командную строку, это:

ls -d -1 "/Volumes/Development/My Project/Project"/**/* | grep \.png$

Печатает список всех файлов, заканчивающихся на .png.

Однако, когда я пытаюсь создать скрипт:

#! /bin/bash

clear ;

# Tempoary dir for processing
mkdir /tmp/ScriptOutput/ ;

wdir="/Volumes/Development/My Project/Project" ;

echo "Working Dir: $wdir" ;

# Get every .PNG file in the project
for image in `ls -d -1 "$wdir"/**/* | grep \.png$`; do
...    
done

Я получаю ошибку:

cp: /Volumes/Development/My: No such file or directory

пробел вызывает проблему, но я не знаю почему?

Ответы [ 4 ]

5 голосов
/ 01 августа 2011

Другой вариант - изменить IFS:

OLDIFS="$IFS"  # save it
IFS="" # don't split on any white space
for file in `ls -R . | grep png`
do 
    echo "$file"
done
IFS=$OLDIFS # restore IFS

Подробнее об IFS см. В man bash.

2 голосов
/ 02 августа 2011
0 голосов
/ 01 августа 2011

вы можете попробовать, [[: space:]] вместо пробела

wdir="/Volumes/Development/My[[:space:]]Project/Project"

или выполнить команду для преобразования одного пробела

wdir=`echo "$wdir" | sed 's/[[:space:]]/\[[:space:]]/g'`
0 голосов
/ 01 августа 2011

Если вы хорошо используете while read и подпроцесс, созданный конвейером, вы можете:

find . -name '*.png' | while read FILE
do 
    echo "the File is [$FILE]"
done
...