繁体   English   中英

Bash脚本打印文件列表

[英]Bash scripting print list of files

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

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

for f in $FILES
do
    echo "this is $f"
done

这是我的输出

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

我的代码有什么问题?

您误解了bash中“ in”一词的含义。 for f in $FILES语句仅对$FILES字符串中的(用空格分隔)单词进行迭代,其值是“ / Bash / sample”(一个单词)。 您似乎希望文件位于命名目录中,这是bash语法不假定的空间隐喻,因此您必须明确地告诉它列出文件。

for f in `ls $FILES`         # illustrates the problem - but don't actually do this (see below)
...

可能会做到。 这会将ls命令的输出转换为字符串“ in”,每个文件中只有一个单词。

注意:此示例是为了帮助理解“ in”的含义,但不是一个好的通用解决方案。 一旦其中一个文件名称中有空格,它将遇到麻烦-这些文件将为列表贡献两个或多个单词,每个单词单独使用可能不是有效的文件名。 这突显了(a)您应该始终采取额外的步骤来解决bash和类似shell中的空格问题,并且(b)您应该避免在自己的文件名和目录名中使用空格,因为否则会遇到很多其他问题尚未努力遵守(a)的有用的第三方脚本和实用程序。 不幸的是,适当的遵从性经常会导致bash中语法的混淆。

我认为路径“ /Bash/sample/* ”中存在问题。

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

/home/username/Bash/sample/*

或使用相对路径,例如:

~/Bash/sample/*

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

/home/username/Bash/sample/*

其中username是您的当前用户名,请使用whoami查看您的当前用户名。

学习Bash的最佳场所: http : //www.tldp.org/LDP/abs/html/index.html

这应该工作:

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输出

列出您的文件)

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

    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###

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM