【问题标题】:Search for an image file extension in a shell script在 shell 脚本中搜索图像文件扩展名
【发布时间】:2014-03-06 13:23:33
【问题描述】:
// Gets all the image names in a directory and its subdirectories then appends them to an array called allFiles.
allFiles =$(ls -R | grep -E "(jpg|png\gif)")

// Gets all the image names used in list.txt and appends them to an array called list.
list=$(grep -Po '".*?"' list.xml | rev | cut -c 2- | rev | cut -c 2-)

for file in AllFiles
do
    notFound = 1

脚本应查看所有文本类型的扩展名(例如:txt、cpp、py、c、html、xml、json)并创建引用的图像文件列表。这包括不在当前工作文件夹中的文件,但也包括在其中的文件夹中的文件。然后它应该获取此列表并将其与当前目录中的图像文件列表(例如:jpg、png、gif)进行比较。如果一个文件存在于目录中,但没有被当前目录中的任何文件引用,则应在最后将其打印为未引用文件。不知道我做错了什么。有人请帮忙

【问题讨论】:

    标签: shell file-extension


    【解决方案1】:

    allFiles 的“赋值”在= 之前有一个空格,因此它尝试运行一个名为allFiles 的命令并且可能会失败。假设这是问题中的错字,您没有使用数组赋值表示法。那将是:

    allFiles=( $(ls -R | grep -E "(jpg|png\gif)") )
    

    我在语法上不必要的内部命令替换周围放置了空格,但是如果没有它们,括号的嵌套将变得难以解释。

    你在分配给list时遇到了同样的基本问题。

    剩下的就是指出解析ls 的输出很容易出错,尤其是在文件名可能包含空格或换行符的情况下。

    作为一个极端情况,考虑:

    $ ls -la | cat
    total 0
    drwxrwxr-x 0 jleffler eng 0 Mar  5 21:14 .
    drwxrwxr-x 0 jleffler eng 0 Feb 21 16:15 ..
    drwxrwxr-x 0 jleffler eng 0 Mar  5 21:15 .
    drwxrwxr-x 0 jleffler eng 0 Mar  5 21:14 .
    drwxrwxr-x 0 jleffler eng 0 Feb 21 16:15 ..
    $
    

    我使用以下方法制作了这个:

    $ mkdir xyz
    $ cd xyz
    $ y=".
    > $(ls -la | sed 1d)"
    $ mkdir "$y"
    $
    

    而且,仅供参考,GNU ls 到终端的输出是:

    $ ls -la
    total 0
    drwxrwxr-x 0 jleffler eng 0 Mar  5 21:14 .
    drwxrwxr-x 0 jleffler eng 0 Feb 21 16:15 ..
    drwxrwxr-x 0 jleffler eng 0 Mar  5 21:15 .?drwxrwxr-x 0 jleffler eng 0 Mar  5 21:14 .?drwxrwxr-x 0 jleffler eng 0 Feb 21 16:15 ..
    $
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多