Shell识别〜而不是〜/ Documents中的文件

亚历克斯·托基

我正在上Unix类,这是我的作业的一部分:

对于用户的〜/ Documents目录中的每个文件和子目录,请确定该项目是文件还是目录,并使用语句中的文件名显示相应的消息。

所以,我写的是这样的:

docs=`ls ~/Documents`

for file in $docs ; do
    if [ -f $file ] ; then
        echo $file "is a file."
    elif [ -d $file ] ; then
        echo $file "is a directory."
    else
        echo $file "is not a file or directory."
    fi
done

我的文档目录包括以下文件和目录:

DocList.txt  (file)
Letter       (file)
mypasswdfile (file)
samples      (directory)
things       (directory)
touchfile    (file)

所以我想输出应该是这样的:

DocList.txt is a file.
Letter is a file.
mypasswdfile is a file.
samples is a directory.
things is a directory.
touchfile is a file.

但是,这是输出:

DocList.txt is not a file or directory.
Letter is not a file or directory
mypasswdfile is not a file or directory
samples is not a file or directory
things is not a file or directory
touchfile is not a file or directory

我想我应该提一下,如果将$ docs变量设置为`ls〜',它将成功显示主目录的内容以及项目是文件还是目录。这不适用于我尝试过的其他路径。

g

您的问题是ls仅输出不带路径的文件名。

所以你$file得到的价值

DocList.txt
Letter
mypasswdfile
samples
things
touchfile

从循环运行到循环运行。

如果您的当前目录不是NOT ~/Documents,则测试这些文件名是错误的,因为这将在当前目录中搜索而不是在预期目录中搜索。

完成任务的更好方法是

for file in ~/Documents/* ; do
    ...
done

它将设置$file为查找文件所需的每个完整路径名。

这样做之后,它应该可以工作,但是它很容易出错:一旦路径或文件之一开始包含空格或其他空白字符,它就会落在您的脚上。

放置"可能包含空格等内容的变量非常重要。几乎没有理由在没有变量的情况下使用它"

这有什么区别?

随着[ -f $file ],并且file='something with spaces'[被调用的参数-fsomethingwithspaces]这肯定会导致错误的行为。

OTOH,与[ -f "$file" ]file='something with spaces'[被调用的参数-fsomething with spaces]

因此,引用在Shell编程中非常重要。

当然,也适用[ -d "$file" ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法识别.bashrc中的Shell函数

来自分类Dev

变量无法在Shell脚本中识别

来自分类Dev

Dropbox而不是Documents文件夹?

来自分类Dev

Dropbox而不是Documents文件夹?

来自分类Dev

在 Rstuido 中创建新项目将其放在 ~/This PC/Documents 文件夹中,而不是在全局选项中指定的目录和

来自分类Dev

从脚本本身中识别Shell脚本的子Shell编号

来自分类Dev

Shell:比较内容文件而不是校验和

来自分类Dev

如何使Maven项目从其自己的目录而不是工作目录中识别文件?

来自分类Dev

Linux Shell和文件系统如何识别Unicode?

来自分类Dev

如何识别不是以R中特定模式开头的行

来自分类Dev

Android中的Tesseract字符识别问题(而不是iOS?)

来自分类Dev

如何用C中的scanf识别输入不是数字?

来自分类Dev

在Linux(Debian)中可靠地识别磁盘(不是分区)

来自分类Dev

Shell脚本而不是Bash中的数组

来自分类Dev

无法识别的选项错误:shell中的getopt命令

来自分类Dev

在Shell脚本中无法识别反引号内的find语句

来自分类Dev

在c中创建一个可识别注释的shell

来自分类Dev

Cloudformation无法识别UserData脚本中的Shell变量

来自分类Dev

如何在shell脚本中识别小时的顶部

来自分类Dev

python从jenkins复制文件中的“权限被拒绝”,但不是从shell复制文件

来自分类Dev

是否可以将 Atril 中的“另存为”配置为打开文件选择器,并选择最新目录而不是下载 PDF 的 /home/Documents?

来自分类Dev

通过Shell进行子处理的结果,而不是保存到文本文件中

来自分类Dev

替换文本文件中的部分但不是全部空格(shell / bash)

来自分类Dev

python , subprocess ,如何将所有内容打印到文件中,而不是在 shell 上

来自分类Dev

通过 shell 脚本而不是使用 Jenkins 文件在 Jenkins 中创建 Docker 镜像的可行性

来自分类Dev

识别Java中的文件类型

来自分类Dev

识别PHP中的PDF / A文件

来自分类Dev

识别文件中的OWL类型

来自分类Dev

它无法识别导入文件中的文件

Related 相关文章

  1. 1

    无法识别.bashrc中的Shell函数

  2. 2

    变量无法在Shell脚本中识别

  3. 3

    Dropbox而不是Documents文件夹?

  4. 4

    Dropbox而不是Documents文件夹?

  5. 5

    在 Rstuido 中创建新项目将其放在 ~/This PC/Documents 文件夹中,而不是在全局选项中指定的目录和

  6. 6

    从脚本本身中识别Shell脚本的子Shell编号

  7. 7

    Shell:比较内容文件而不是校验和

  8. 8

    如何使Maven项目从其自己的目录而不是工作目录中识别文件?

  9. 9

    Linux Shell和文件系统如何识别Unicode?

  10. 10

    如何识别不是以R中特定模式开头的行

  11. 11

    Android中的Tesseract字符识别问题(而不是iOS?)

  12. 12

    如何用C中的scanf识别输入不是数字?

  13. 13

    在Linux(Debian)中可靠地识别磁盘(不是分区)

  14. 14

    Shell脚本而不是Bash中的数组

  15. 15

    无法识别的选项错误:shell中的getopt命令

  16. 16

    在Shell脚本中无法识别反引号内的find语句

  17. 17

    在c中创建一个可识别注释的shell

  18. 18

    Cloudformation无法识别UserData脚本中的Shell变量

  19. 19

    如何在shell脚本中识别小时的顶部

  20. 20

    python从jenkins复制文件中的“权限被拒绝”,但不是从shell复制文件

  21. 21

    是否可以将 Atril 中的“另存为”配置为打开文件选择器,并选择最新目录而不是下载 PDF 的 /home/Documents?

  22. 22

    通过Shell进行子处理的结果,而不是保存到文本文件中

  23. 23

    替换文本文件中的部分但不是全部空格(shell / bash)

  24. 24

    python , subprocess ,如何将所有内容打印到文件中,而不是在 shell 上

  25. 25

    通过 shell 脚本而不是使用 Jenkins 文件在 Jenkins 中创建 Docker 镜像的可行性

  26. 26

    识别Java中的文件类型

  27. 27

    识别PHP中的PDF / A文件

  28. 28

    识别文件中的OWL类型

  29. 29

    它无法识别导入文件中的文件

热门标签

归档