// 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)进行比较。如果目录中存在文件但当前目录中的任何文件都未引用该文件,则应将其作为未引用文件打印出来。不知道我做错了什么。有人请帮忙
答案 0 :(得分:0)
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 ..
$