我正在编写一个shell脚本..给定一个文件夹作为命令行arg它将打印出其中的文件/文件夹的名称
#!/bin/sh
folder="$1"
for f in "$folder"
do
echo "$f"
done
这只打印出给定文件夹的第一个文件/文件夹。
答案 0 :(得分:4)
在*
之后,您需要以目录分隔符$folder
分隔的shell globbing运算符/
:
for f in "$folder"/*
do
echo "$f"
done
*
会扩展为$folder
内的所有文件。
顺便说一句,我发现你使用sh
(不是bash
)作为脚本解释器; sh
在所有系统中都不是bash
(例如在Ubuntu中),所以如果您使用bash
(虽然在这种情况下没有任何区别),请明确使用bash
在Shebang(例如#!/usr/bin/env bash
)。
答案 1 :(得分:1)
您还可以使用find
命令:
folder="$1"
find "$folder"
正如@Anubis在评论中指出的那样,find
命令默认是递归的:它还将从目标文件夹开始搜索文件/文件夹到子目录中。您可以使用-mindepth
和-mindepth
选项将结果限制在当前目录中:
find "$folder" -mindepth 1 -maxdepth 1
请注意,如果省略-mindepth 1