问题在bash中列出文件,目录路径中包含空格

rjs*_*ing 5 bash command-line ls

当在命令行中输入目录时,这个:

ls -d -1 "/Volumes/Development/My Project/Project"/**/* | grep \.png$
Run Code Online (Sandbox Code Playgroud)

打印以...结尾的所有文件的列表.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
Run Code Online (Sandbox Code Playgroud)

我收到错误:

cp: /Volumes/Development/My: No such file or directory
Run Code Online (Sandbox Code Playgroud)

space是一个问题,但我不知道为什么?

Mic*_*jer 5

另一种选择是改变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
Run Code Online (Sandbox Code Playgroud)

阅读更多关于IFS的信息man bash.


Mic*_*jer 1

如果您喜欢使用while read管道创建的子进程,您可以:

find . -name '*.png' | while read FILE
do 
    echo "the File is [$FILE]"
done
Run Code Online (Sandbox Code Playgroud)