Bash脚本打印文件列表

时间:2014-09-29 15:01:11

标签: 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 / *

我的代码出了什么问题?

4 个答案:

答案 0 :(得分:2)

你误解了bash在"中的含义是什么意思。语句for f in $FILES简单地遍历字符串$FILES中的(空格分隔的)单词,其值为" / Bash / sample" (一个词)。你似乎想要" in"命名目录,bash的语法没有假设的空间隐喻,因此你必须明确地告诉它列出文件。

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

可能会这样做。这会将ls命令的输出转换为字符串,"在"每个文件将有一个单词。

注意:这个例子是为了帮助理解" in"意味着但是一个很好的通用解决方案。一旦其中一个文件的名称中有空格,它就会遇到麻烦 - 这样的文件将为列表提供两个或多个单词,每个单独的单词可能不是有效的文件名。这突出了(a)你应该总是采取额外的步骤来编写bash和类似shell中的空白问题,以及(b)你应该避免在你自己的文件和目录名称中的空格,因为你会遇到很多其他有用的第三方脚本和实用程序没有努力遵守(a)。不幸的是,正确的合规性通常会导致bash中的语法模糊不清。

答案 1 :(得分:0)

我认为路径问题" /Bash/sample/*"。

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

/home/username/Bash/sample/*

或使用相对路径,例如:

~/Bash/sample/*

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

/home/username/Bash/sample/*

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

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

答案 2 :(得分:0)

这应该有效:

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

&安培;你should not parse ls output

答案 3 :(得分:0)

列出你的文件)

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

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