問題

2011-08-01 21 views
4

コマンドラインにディレクトリを入力するときは、この:問題

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 

スペースは、問題の原因となっているが、私はなぜか分からないのですか?

答えて

0

は、あなたができるパイプによって作成while readとサブプロセスを使用して、あなた罰金場合:

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

「見つける」こともできます。 -name '* .png' -exec echo {} \; ''検索する-execオプションは、必要に応じて何度も使用できます。 – jfg956

+0

右 - 1つのコマンド(ここではechoなど)では、-exec(またはファイルが多数ある場合はパフォーマンス向上のために| xargs)を使用することをお勧めします。 1つ以上のコマンドについてはwhileループを優先します。私のために読むのが簡単です。乾杯。 –

4

別のオプションは、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 

man bashにIFSについては、こちらをご覧ください。

0

あなたは[[:スペース:]]、試すことができますスペース

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

または

wdir=`echo "$wdir" | sed 's/[[:space:]]/\[[:space:]]/g'`