Bash脚本打印文件列表

Bash脚本打印文件列表,bash,Bash,这是我第一次使用BASH脚本,我一直在看一些教程,但找不出一些代码。我只想列出文件夹中的所有文件,但我做不到。 这是到目前为止我的密码 #!/bin/bash # My first script echo "Printing files..." FILES="/Bash/sample/*" for f in $FILES do echo "this is $f" done 这是我的输出 正在打印文件。。。 这是/Bash/sample/* 我的代码有什么问题?我认为path/Bash

这是我第一次使用BASH脚本,我一直在看一些教程,但找不出一些代码。我只想列出文件夹中的所有文件,但我做不到。 这是到目前为止我的密码

#!/bin/bash
# My first script
echo "Printing files..."
FILES="/Bash/sample/*"

for f in $FILES
do
    echo "this is $f"
done
这是我的输出

正在打印文件。。。 这是/Bash/sample/*

我的代码有什么问题?

我认为path/Bash/sample/*中存在问题

您需要将此位置更改为绝对位置,例如:

/home/username/Bash/sample/*

或使用相对路径,例如:

~/Bash/sample/*

在大多数系统上,这完全等同于:

/home/username/Bash/sample/*

如果username是您的当前用户名,请使用whoami查看您的当前用户名


学习Bash的最佳场所:

您误解了Bash在中的意思。$FILES中的f语句只是在字符串$FILES中以空格分隔的单词上迭代,其值为/Bash/sample one word。您似乎想要命名目录中的文件,bash的语法不采用这种空间隐喻,因此您必须显式地告诉它列出文件

for f in `ls $FILES`         # illustrates the problem - but don't actually do this (see below)
...
也许可以。这将ls命令的输出转换为字符串,其中每个文件将有一个字

注意:这个例子有助于理解in的意思,但不是一个好的通用解决方案。一旦其中一个文件的名称中有空格,它就会遇到问题。这些文件将在列表中添加两个或多个单词,单独使用这些单词可能不是有效的文件名。这突出了一点,即您应该始终采取额外的步骤来解决bash和类似shell中的空白问题,以及b您应该避免在您自己的文件和目录名中使用空格,因为您会遇到许多其他有用的第三方脚本和实用程序,这些脚本和实用程序没有努力遵守a。不幸的是,正确的遵从性通常会导致bash中的语法非常混乱。

这应该可以:

echo "Printing files..."
FILES=(/Bash/sample/*) # create an array.
                       # Works with filenames containing spaces.
                       # String variable does not work for that case.

for f in "${FILES[@]}" # iterate over the array.
do
    echo "this is $f"
done

&你。

记下你的文件清单

如果要获取文件列表并查看它们:

    ls                           ###Takes list###
    ls -sh                       ###Takes list + File size###
    ...
如果要将文件列表发送到文件以供以后读取和检查,请执行以下操作:

    ls > FileName.Format         ###Takes list and sends them to a file###
    ls > FileName.Format         ###Takes list with file size and sends them to a file###

您没有得到文件列表,只是定义了一个字符串,该字符串恰好包含文件系统路径+通配符。您得到的输出可能出现在两种情况下-要么/Bash/sample目录不存在,要么/Bash/sample目录为空。如果文件包含空格,则此代码有问题。原始方法更好。@IRus,@anishsane:当然可以。请参见编辑答案中的免责声明。但这更多的是让不熟悉bash的人在变得更加技术化或语法模糊之前快速掌握概念。我个人会使用find$FILES-maxdepth 1-typef-exec echo{};而不是for循环,以最大限度地控制文件的深度和类型。您如何确定他没有目录/Bash/sample/?只是猜测:将文件放在根目录中是不寻常的。