如何获取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循环语法。