我正在尝试使用shell脚本获取目录的内容。
我的脚本是:
for entry in `ls $search_dir`; do
echo $entry
done
其中$search_dir
是相对路径。但是,$search_dir
包含许多名称中包含空格的文件。在这种情况下,此脚本不会按预期运行。
我知道我可以使用for entry in *
,但它只适用于我当前的目录。
我知道我可以切换到该目录,使用for entry in *
,然后切换回原来的目录,但我的特殊情况使我无法这样做。
我有两个相对路径$search_dir
和$work_dir
,我必须同时处理这两个路径,读取它们并在其中创建/删除文件等。
那么我现在该怎么做呢?
附言:我使用bash。
发布于 2010-03-13 14:08:12
for entry in "$search_dir"/*
do
echo "$entry"
done
发布于 2017-04-27 23:08:50
这是一种语法更容易理解的方法:
yourfilenames=`ls ./*.txt`
for eachfile in $yourfilenames
do
echo $eachfile
done
./
是当前工作目录,但可以替换为任何路径
*.txt
返回anything.txt
您可以通过直接在终端中键入ls
命令来轻松查看列出的内容。
基本上,您创建了一个变量yourfilenames
,其中包含list命令作为单独元素返回的所有内容,然后遍历它。该循环创建一个临时变量eachfile
,该变量包含循环通过的变量的单个元素,在本例中是一个文件名。这不一定比其他答案更好,但我觉得很直观,因为我已经熟悉了ls
命令和for循环语法。
发布于 2014-10-24 00:13:52
这里的其他答案都很棒,回答了你的问题,但这是谷歌对"bash get list of files in directory“的最高搜索结果(我正在寻找它来保存文件列表),所以我想我应该发布这个问题的答案:
ls $search_path > filename.txt
如果您只需要某种类型(例如,任何.txt文件):
ls $search_path | grep *.txt > filename.txt
请注意,$search_path是可选的;ls > filename.txt将执行当前目录。
https://stackoverflow.com/questions/2437452
复制相似问题