如何获取shell脚本中目录中的文件列表?

我正在尝试使用shell脚本来获取目录的内容。

我的脚本是:

for entry in `ls $search_dir`; do echo $entry done 

其中$search_dir是一个相对path。 但是, $search_dir包含许多名称中带有空格的文件。 在这种情况下,此脚本不能按预期方式运行。

我知道我可以使用for entry in * ,但只适用于我目前的目录。

我知道我可以更改到该目录, for entry in *然后改回来,但是我的特殊情况阻止我这样做。

我有两个相对path$search_dir$work_dir ,我必须同时工作,阅读他们创build/删除文件等等。

那么我现在该做什么?

PS:我用bash。

 for entry in "$search_dir"/* do echo "$entry" done 
 for entry in "$search_dir"/* "$work_dir"/* do if [ -f "$entry" ];then echo "$entry" fi done 

在这里的其他答案是伟大的,回答你的问题,但这是“bash获取目录中的文件列表”,(我正在寻找保存文件列表)的顶部谷歌结果,所以我想我会张贴回答这个问题:

 ls $search_path > filename.txt 

如果你只想要一个特定的types(例如任何.txt文件):

 ls $search_path | grep *.txt > filename.txt 

请注意,$ search_path是可选的; ls> filename.txt将执行当前目录。

 find "${search_dir}" "${work_dir}" -mindepth 1 -maxdepth 1 -type f -print0 | xargs -0 -I {} echo "{}" 

这是一个方法来做到这一点,语法更简单,让我明白:

 yourfilenames=`ls ./*.txt` for eachfile in $yourfilenames do echo $eachfile done 

./是当前的工作目录,但可以用任何pathreplace
*.txt返回anything.txt
您可以通过直接在terminal中inputls命令来检查将列出的内容。

基本上,你创build一个variablesyourfilenames包含列表命令返回的一切作为一个单独的元素,然后你通过它循环。 循环创build一个临时variableseachfile ,其中包含它正在循环的variables的单个元素,在这种情况下是文件名。 这不一定比其他答案更好,但我觉得它很直观,因为我已经熟悉了ls命令和for循环语法。