Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BASH-如何获取名称中带有空格的文件夹的内容?_Bash_Variables - Fatal编程技术网

BASH-如何获取名称中带有空格的文件夹的内容?

BASH-如何获取名称中带有空格的文件夹的内容?,bash,variables,Bash,Variables,我可以使用以下方法获取没有空格的文件夹的内容: files=~/Movies/MyFolder/MySubfolder* 但如果文件夹名称中有空格,则以下操作无效: files=~/Movies/My\Folder/My\Subfolder/* 我尝试按如下方式回显文件夹内容: for f in "$files" do echo "$f" done 我还尝试在路径周围加上引号: files=~/“电影/我的文件夹/我的子文件夹”/* 感谢您抽出时间。使用阵列: #Works bette

我可以使用以下方法获取没有空格的文件夹的内容:

files=~/Movies/MyFolder/MySubfolder*

但如果文件夹名称中有空格,则以下操作无效:

files=~/Movies/My\Folder/My\Subfolder/*

我尝试按如下方式回显文件夹内容:

for f in "$files"
do
    echo "$f"
done
我还尝试在路径周围加上引号:

files=~/“电影/我的文件夹/我的子文件夹”/*

感谢您抽出时间。

使用阵列:

#Works better, and recursively.
find ~/"Movies/My Folder/My Subfolder" -iname \*jpg | while read f ; do
    echo $f
done
shopt -s nullglob   # If the folder is empty, don't treat * literally
files=(~/Movies/My\ Folder/My\ Subfolder/*)
for f in "${files[@]}"; do
    echo $f
done
或者,正如丹尼斯所说,直接迭代glob(我错误地认为这不起作用):


是否可以对其进行调整以查找某些文件?例如.*.jpg*.png等我可以在ls语句的末尾使用Grep吗?ls“~/Movies/My Folder/My Subfolder/*jpg”或者更好,使用find:-)@squarefrog:不要使用
ls
-它不是用于此目的的。使用“$HOME/Movies/My Folder/My Subfolder/”*中的
作为f,或使用“/Movies/My Folder/My Subfolder/”*.jpg中的
作为f(使用
$HOME
文件夹的两种方法,以及使用和不使用扩展名)。您是否看到它不用于,但在使用时-因为我不明白这是怎么回事。此外,for在没有文件时可能无法工作,并且在不存在任何文件时最终会给您“$HOME/Movies/My Folder/My Subfolder/”*。我之所以选择我写的东西是有原因的。不需要数组,只需直接在glob上迭代。这可能有效,也可能无效。我创建了一个空文件夹来验证-
Karthiks MacBook Air:~karthik$files=(~/Movies/My\folder/My\Subfolder/*)Karthiks MacBook Air:~karthik$for f in“${files[@]}”;do>echo$f>done/Users/karthik/Movies/My Folder/My Subfolder/*
如果文件夹是空的,glob将按字面意思处理。您可以执行“shopt-s nullglob”使glob生成一个空列表。您打算如何处理此文件列表?echo只是用于测试,但我的finish脚本使用FFMPEG为XBMC生成缩略图文件,因为它们是家庭视频,因此无法从DVDB中提取:)
shopt -s nullglob
for f in ~/Movies/My\ Folder/My\ Subfolder/*; do
    echo $f
done