我尝试遍历目录中的每个文件。以下是我目前为止的代码。
while read inputline
do
input="$inputline"
echo "you entered $input";
if [ -d "${input}" ]
then
echo "Good Job, it's a directory!"
for d in $input
do
echo "This is $d in directory."
done
exit
我的输出始终只有一行
this is $input directory.
为什么这个代码不起作用?我做错了什么?
好啊。当我回显的时候它会打印出来
$input/file
为什么要这样做呢?它不应该直接打印出没有目录前缀的文件吗?
3条答案
按热度按时间col17t5w1#
2uluyalo2#
如果你想稍微简化一下,去掉目录检查,你可以只写它来处理文件和目录,比如:
i34xakig3#
您可能会认为循环遍历文件很容易,对吗?但这在bash中充满了陷阱。
使用globs是最糟糕的。相信我,不要这样做
例如,使用find更好。
find
有很多选项可以按名称、按日期、按所有者...随便什么来过滤结果。它非常强大。但是,如果文件名包含空格,则使用
for-find
会失败。要修复此问题,请使用...或者,如果您不喜欢奇怪的
done
语法,您可以用途:但是,如果文件名包含换行符怎么办?!会发生这种情况吗?是的,它会发生,但它是极其罕见的。所以,如果你是 PARANOID,你可以做:
在我看来,额外的混乱是不值得的,所以我不建议这样做。人们谁把换行符在文件名应该感到痛苦。