gpt4 book ai didi

bash - 用于列出给定目录中的文件以及它们是文件还是目录的 Shell 脚本

转载 作者:行者123 更新时间:2023-11-29 09:39:50 28 4
gpt4 key购买 nike

目前正在学习一些 bash 脚本,遇到一个涉及列出给定目录中的所有文件并说明它们是文件还是目录的问题。我遇到的问题是我只能得到我的当前目录,或者如果指定了一个目录,它只会说它是一个目录,例如。/home/user/shell_scripts 将返回 shell_scipts 是一个目录而不是其中包含的文件。这是我目前所拥有的:

dir=$dir
for file in $dir; do
if [[ -d $file ]]; then
echo "$file is a directory"
if [[ -f $file ]]; then
echo "$file is a regular file"
fi
done

最佳答案

你的线路:

for file in $dir; do

将扩展 $dir 只是一个目录字符串。您需要做的是将其扩展为目录中的文件列表。您可以使用以下方法执行此操作:

for file in "${dir}/"* ; do

这会将 "${dir}/"* 部分展开为当前目录的仅名称列表。正如 Biffen 指出的那样,这应该保证文件列表不会以 file 中的部分文件名结束,如果它们中的任何一个包含空格的话。

如果您想递归到 dir 中的目录,那么使用 find 可能是更好的方法。只需使用:

for file in $( find ${dir} ); do

请注意,虽然简单,但这将处理其中包含空格的文件或目录。因此,我很想放弃循环并一次性生成输出。这可能与您想要的略有不同,但可能更易于阅读且效率更高,尤其是对于大量文件。例如,要列出所有目录:

find ${dir} -maxdepth 1 -type d

并列出文件:

find ${dir} -maxdepth 1 -type f

如果你想迭代到下面的目录,然后删除 -maxdepth 1

关于bash - 用于列出给定目录中的文件以及它们是文件还是目录的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36545025/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com